zoukankan      html  css  js  c++  java
  • 我的第一个 Windows 窗口程序(1)

     

    一般来说,构建一个 Windows 程序可以分为如下几个步骤:

    • 定义窗口类(WNDCLASS)
    • 注册窗口类(RegisterClass)
    • 创建窗口(CreateWindow)
    • 更新显示窗口(UpdateWindow、ShowWindow)
    • 建立消息循环(GetMessage)
    • 处理消息(DispatchMessage)

    消息处理由窗口过程(WndProc)来完成,消息分为队列消息和非队列消息两种:

    • 队列消息:Windows 放入消息队列的消息,在消息循环中被检索(GetMessage),然后分发投递到窗口过程中(DispatchMessage)。
    • 非队列消息:Windows 对窗口过程的直接调用(将消息直接发送到窗口过程)

    Windows 示例程序代码:

    #include <windows.h>

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
       HDC hdc;
       PAINTSTRUCT ps;
    switch (message) { case WM_CREATE: /* 窗口创建时的消息处理 */ return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); /* 窗口重绘的消息处理 */ EndPaint(hwnd, &ps); return 0; case WM_DESTROY: /* 窗口销毁时的消息处理 */ PostQuitMessage(0); return 0; } /* 默认的窗口过程消息处理 */ return DefWindowProc(hwnd, message, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { LPCTSTR lpszClassName = TEXT("demo"); /* 定义窗口类 */ WNDCLASS wndclass; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hInstance = hInstance; wndclass.lpszClassName = lpszClassName; wndclass.lpszMenuName = NULL; wndclass.lpfnWndProc = WndProc; wndclass.style = CS_HREDRAW | CS_VREDRAW; /* 注册窗口类 */ if (!RegisterClass(&wndclass)) { MessageBox(NULL, TEXT("This Program requires Windows NT!"), lpszClassName, MB_ICONERROR); return 0; } /* 创建窗口 */ HWND hwnd = CreateWindow( lpszClassName, TEXT("Demo Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); /* 更新显示窗口 */ UpdateWindow(hwnd); ShowWindow(hwnd, nCmdShow); /* 消息循环 */ MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; }

          从上面的程序示例可以看出,WinMain函数完成了程序的基本配置,并且建立了消息循环,WndProc窗口过程则完成每一次消息循环的处理。这样,一个简单的Windows程序框架基本上就构建出来了,其中的细节值得回味。

  • 相关阅读:
    Something I know about WebDynpro
    Details about support package implementation
    CRM Middleware Performance Topics
    Way to configure the logon navigaion layouts via Business Roles in CRM
    DOM 常用节点类型和方法
    第一届 xdef 会议日程
    去除百度音乐盒广告的chrome插件 持续更新
    从人人网抓取高校数据信息,包括,省份 高校 院系 (提供最终SQL文件下载)
    PHP 与 JSON
    解决HTTPS 发送请求走socket问题
  • 原文地址:https://www.cnblogs.com/yenyuloong/p/9071148.html
Copyright © 2011-2022 走看看