学习:窗口创建以及消息处理basic.c

示例代码:

#include<windows.h>

//变量声明
HINSTANCE hinst;

//函数声明
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){
    WNDCLASSEX wcx; //窗口类
    HWND hwnd; //窗口句柄
    MSG msg;  //消息
    BOOL fGotMessage; //是否成功获取消息
    hinst = hinstance;
    
    //对创建的窗口类进行填充相应的数据结构
    wcx.cbSize = sizeof(wcx); //cxSize转到定义为 该类型为UINT
    wcx.style = CS_HREDRAW | CS_VREDRAW; //样式 大小改变时 重新进行绘制
    wcx.lpfnWndProc = MainWndProc; // 窗口消息处理函数
    wcx.cbWndExtra = 0; // 步使用类内存
    wcx.cbClsExtra = 0; // 不使用窗口内存
    wcx.hInstance = hinstance;  //所属的应用程序的实例句柄
    wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION); //图标: 默认
    wcx.hCursor = LoadCursor(NULL, IDC_ARROW);   // 光标:默认
    wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景:WHITE_BRUSH
    wcx.lpszMenuName = NULL; // 菜单:步使用
    wcx.lpszClassName = "MainClass"; //窗口类型
    wcx.hIconSm = (HICON)LoadImage(hinstance, MAKEINTRESOURCE(5), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CXSMICON), LR_DEFAULTCOLOR);

    if (!RegisterClassEx(&wcx)) { //创建窗口类
        return 1;
    }

    //调用CreateWindow API
    hwnd = CreateWindow("MainClass", //窗口名
        "CH 2-3",  //窗口标题
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, //水平位置:默认
        CW_USEDEFAULT, //垂直位置:默认
        CW_USEDEFAULT, //宽度位置:默认
        CW_USEDEFAULT, //高度位置:默认
        (HWND)NULL, // 父窗口:无
        (HMENU)NULL, //菜单:使用窗口类的菜单
        hinstance,  //应用程序实例句柄
        (LPVOID)NULL); //窗口创建时数据:无

    if (!hwnd) {
        return 1;
    }

    //显示窗口
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    //消息循环,这里十分重要,自己摸索
    while ((fGotMessage = GetMessage(&msg, (HWND)NULL, 0, 0)) != 0 && fGotMessage != -1) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

/*
MainWndProc
功能:窗口消息处理函数 对所有的消息都使用默认处理函数
*/
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    switch (uMsg) {
    case WM_DESTROY:
        ExitThread(0);
        return 0;
    default:
        return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    
}

效果图:

猜你喜欢

转载自www.cnblogs.com/zpchcbd/p/11900580.html