动手写第一个Windows程序

运行Visual Studio 2019

单击【文件】菜单→选择【新建】→【项目】,选择【空项目】→【下一步】,项目名称WinMain→点击【创建】

选择【解决方案资源管理器】中的【源文件】右键单击【源文件】→【添加】→【新建项】

添加代码,另外还需要设置字符集和子系统,否则会报错误

字符集设置,选择【WinMain】右击属性,选择【配置属性】→【高级】→【字符集】→【使用多字节字符集】

子系统设置,选择【WinMain】右击属性,选择【配置属性】→【链接器】→【子系统】→【窗口(/SUBSYSTEM:WINDOWS)】

 

代码:

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
    HWND hwnd,          // handle to window
    UINT uMsg,            // message identifier
    WPARAM wParam,    // first message parameter
    LPARAM lParam         // second message parameter
);

int WINAPI WinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR lpCmdLine,
    _In_ int nShowCmd
)

//int WINAPI WinMain(
//    HINSTANCE hInstance,          // handle to current instance
//    HINSTANCE hPrevInstance,        // handle to previous instance
//    LPSTR lpCmdLine,               // command line
//    int nCmdShow                       // show state
//)// 会报错 严重性    代码    说明    项目    文件    行    禁止显示状态 警告    C28251    “WinMain”的批注不一致: 此实例包含 无批注。请参见 c:\program files (x86)\windows kit
{
    //设计一个窗口类
    WNDCLASS wndcls;
    wndcls.cbClsExtra = 0;//窗口类无扩展
    wndcls.cbWndExtra = 0;//窗口实例无扩展
    wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_PEN);//窗口背景颜色白色
    wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);//窗口光标
    wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);//窗口图标
    wndcls.hInstance = hInstance;        //应用程序实例句柄由WinMain函数传进来
    wndcls.lpfnWndProc = WinSunProc;//定义窗口消息处理函数
    wndcls.lpszClassName = "sunxin2019";//窗口类名为"sunxin2019"
    wndcls.lpszMenuName = NULL;//窗口无菜单
    wndcls.style = CS_HREDRAW | CS_VREDRAW;//窗口样式
    RegisterClass(&wndcls);

    //创建窗口,定义一个变量用来保存成功创建窗口后返回的句柄
    HWND hwnd;//窗口句柄
    hwnd = CreateWindow("sunxin2019",//窗口类名
        "http://www.ceovs.com",//窗口实例标题
        WS_OVERLAPPEDWINDOW,/// 窗口风格,或称窗口格式
        0, // 初始 x 坐标
        0,  // 初始 y 坐标
        600,   // 初始 x 方向尺寸
        400,// 初始 y 方向尺寸
        NULL, // 父窗口句柄
        NULL, // 窗口菜单句柄
        hInstance,// 程序实例句柄
        NULL); // 创建参数

    //显示及刷新窗口
    ShowWindow(hwnd, SW_SHOWNORMAL);//显示窗口
    UpdateWindow(hwnd);//刷新窗口

    //定义消息结构体,开始消息循环
    MSG msg;
    BOOL bRet;
    //while (GetMessage(&msg, NULL, 0, 0))
    while ((bRet = GetMessage(&msg, hwnd, 0, 0)) != 0)
    {
        if (bRet == -1)
        {
            // handle the error and possibly exit
            return -1;
        }
        else
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }


    }
    return msg.wParam;
}

//编写窗口过程函数
LRESULT CALLBACK WinSunProc(
    HWND hwnd,          // handle to window
    UINT uMsg,           // message identifier
    WPARAM wParam,    // first message parameter
    LPARAM lParam         // second message parameter
)
{
    switch (uMsg)
    {
    case WM_CHAR:
        char szChar[20];
        sprintf_s(szChar, sizeof(szChar), "按键对应的ASCII码值 %d", wParam);
        MessageBox(hwnd, szChar, "char", 0);
        break;
    case WM_LBUTTONDOWN:
        MessageBox(hwnd, "mouse clicked", "message", 0);
        HDC hdc;
        hdc = GetDC(hwnd);        //不能在响应WM_PAINT消息时调用
        TextOut(hdc, 0, 50, "程序员之家", strlen("程序员之家"));
        ReleaseDC(hwnd, hdc);
        break;
    case WM_PAINT:
        HDC hDC;
        PAINTSTRUCT ps;
        hDC = BeginPaint(hwnd, &ps);        //BeginPaint只能在响应WM_PAINT消息时调用
        TextOut(hDC, 0, 0, "http://www.phei.com.cn", strlen("http://www.phei.com.cn"));
        EndPaint(hwnd, &ps);
        break;
    case WM_CLOSE:
        if (IDYES == MessageBox(hwnd, "是否真的结束?", "提示",MB_YESNO))
        {
            DestroyWindow(hwnd);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    return 0;
}

 

 

 

步骤1:

 

 

步骤2:

 

 

步骤3:

 

 

步骤4:

 

步骤5:

 

步骤6:

 

 

步骤7:

 

 

步骤8:

 

步骤9:

 

posted @ 2021-01-30 21:12  梦之心  阅读(330)  评论(0编辑  收藏  举报