zoukankan      html  css  js  c++  java
  • Windows 窗口上建立控件

    代码
     1 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
     2 {
     3     int wmId, wmEvent;
     4     PAINTSTRUCT ps;
     5     HDC hdc;
     6 
     7     COleDateTime dtNow = COleDateTime::GetCurrentTime();
     8     CString strNow = dtNow.Format(_T("%Y-%m-%d %H:%M:%S"));
     9     if (message == WM_COMMAND)
    10     {
    11         USES_CONVERSION;
    12         _RPT3(_CRT_WARN, "[%s]%s->%d\n", T2A(strNow), GetMsgName(message), message);
    13         _RPT3(_CRT_WARN, "HIwParam:%d,LOwParam:%d,lParam:%d\n"
    14             , HIWORD(wParam), LOWORD(wParam), lParam);
    15     }
    16 
    17     switch (message)
    18     {
    19     case WM_COMMAND:
    20         wmId    = LOWORD(wParam);
    21         wmEvent = HIWORD(wParam);
    22         // Parse the menu selections:
    23         switch (wmId)
    24         {
    25         case IDM_ABOUT:
    26             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
    27             break;
    28         case IDM_EXIT:
    29             DestroyWindow(hWnd);
    30             break;
    31         default:
    32             return DefWindowProc(hWnd, message, wParam, lParam);
    33         }
    34         break;
    35     case WM_PAINT:
    36         hdc = BeginPaint(hWnd, &ps);
    37         // TODO: Add any drawing code here...
    38         EndPaint(hWnd, &ps);
    39         break;
    40     case WM_DESTROY:
    41         PostQuitMessage(0);
    42         break;
    43     case WM_CREATE:
    44         {
    45         HWND hWndBtn = CreateWindow(TEXT("BUTTON"),        //控件"类名称"
    46             TEXT("按钮(&A)"),
    47             WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
    48             10,
    49             10,
    50             100,
    51             100,
    52             hWnd,
    53             (HMENU)1000,            //控件ID
    54             ((LPCREATESTRUCT) lParam)->hInstance,    //实例句柄
    55             NULL);
    56         _RPT1(_CRT_WARN, "hWndBtn:%d\n", hWndBtn);
    57         return 0;
    58         }
    59 
    60     case WM_GETMINMAXINFO:
    61         {
    62             PMINMAXINFO pMinMaxInfo = (PMINMAXINFO)lParam;
    63             int a = 10;
    64         }
    65         break;
    66     default:
    67         return DefWindowProc(hWnd, message, wParam, lParam);
    68     }
    69     return 0;
    70 }

    一、概述

    控件是子窗口,它们是系统已经定义好的窗口类,因此不需要注册、
    也不需要写消息处理函数。
    在主窗口得到WM_CREATE消息时,建立子窗口即可。

    二、关于WM_CREATE消息
    WM_CREATE 的lParam参数将会传入一个建立时信息结构指针(LPCREATESTRUCT)。
    结构中包含了一些有用信息(窗口建立时的参数)。

    typedef struct tagCREATESTRUCT {
        LPVOID    lpCreateParams; 
        HINSTANCE hInstance;		//实例句柄 
        HMENU     hMenu;			 
        HWND      hwndParent; 
        int       cy; 
        int       cx; 
        int       y; 
        int       x; 
        LONG      style; 
        LPCTSTR   lpszName; 
        LPCTSTR   lpszClass; 
        DWORD     dwExStyle; 
    } CREATESTRUCT, *LPCREATESTRUCT; 

    三、 控件与父窗口的协作
    控件上发生动作时,将向父窗口发送通知消息WM_COMMAND。
    WM_COMMAND:
    HIWORD(wParam):通知码(notification code)
    LOWORD(wParam):控件ID
    (HWND)lParam: 控件句柄

    四、 输入

    当点击Click按钮时,产生的输出日志如下:
    hWndBtn:68650        /* 第56行输出的HWND*/
    AfterCreateWindow!
    AfterShowWindow!
    AfterUpdateWindow!
    [2010-05-25 22:41:09]WM_COMMAND->273  /* 通知父窗口的消息*/
    HIwParam:0,LOwParam:1000,lParam:68650     /* 消息参数,lParam就是控件的HWND*/

    将CreateWindow(TEXT("BUTTON")中的“BUTTON” 改为“EDIT"时,产生的日志如下:

    AfterUpdateWindow!
    [2010-05-25 22:51:20]WM_COMMAND->273  /*  鼠标点击,获取焦点*/
    HIwParam:256,LOwParam:1000,lParam:134186        
    [2010-05-25 22:51:28]WM_COMMAND->273  /* 利用回退键删除一个字符(产生的第一个消息)*/
    HIwParam:1024,LOwParam:1000,lParam:134186
    [2010-05-25 22:51:28]WM_COMMAND->273  /* 利用回退键删除一个字符(产生的第二个消息)*/
    HIwParam:768,LOwParam:1000,lParam:134186
    [2010-05-25 22:51:33]WM_COMMAND->273  /*  控件失去焦点*/
    HIwParam:512,LOwParam:1000,lParam:134186

  • 相关阅读:
    sublime text
    php 实例说明 socket通信机制
    nusaop 关于webService
    vim操作集合
    gitHud设置公钥
    redis在window安装并启动
    百度云api 添加标注
    微信小程序bindTap获取对应值
    Java导出excel表
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/cplusplus/p/1743967.html
Copyright © 2011-2022 走看看