win32窗口添加按钮及按钮消息相应,动态显示时间

1、首先建立一个win32项目

2、建立晚工程之后找到回调函数WndProc(HWND, UINT, WPARAM, LPARAM)的实现部分

在case语句中WM_CREATE三个CreateWindow分别创建按钮和显示时间的lable,建议创建lable的句柄hLadle 设为全局变量方便用。其中用于放时间的数组sTimeBuf也建议设为

全局的数组。

  1 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2 {
  3     int wmId, wmEvent;
  4     PAINTSTRUCT ps;
  5     HDC hdc;
  6     HWND hwndButtonCintinue ;
  7     HWND hwndButtonExit ;
  8 
  9     switch (message)
 10     {
 11     case WM_CREATE:
 12         {
 13             hwndButtonCintinue=CreateWindow(TEXT("button"),//必须为:button    
 14                 TEXT("继续导入"),//按钮上显示的字符    
 15                 WS_CHILD | WS_VISIBLE,  
 16                 100,240,100,50,  //按钮在界面上出现的位置
 17                 hWnd,(HMENU)IDC_BUTTON_CONTINUE,  //设置按钮IDIDC_BUTTON_CONTINUE = 131自己定义ID
 18                 ((LPCREATESTRUCT)lParam)->hInstance,NULL); 
 19 
 20             hwndButtonExit=CreateWindow(TEXT("button"),//必须为:button    
 21                 TEXT("退出"),//按钮上显示的字符    
 22                 WS_CHILD | WS_VISIBLE,  
 23                 400,240,100,50,  //按钮在界面上出现的位置
 24                 hWnd,(HMENU)IDC_BUTTON_EXIT,  //设置按钮ID IDC_BUTTON_EXIT =132自己定义ID
 25                 ((LPCREATESTRUCT)lParam)->hInstance,NULL); 
 26             
 27             //获取系统时间并显示到界面上
 28             SYSTEMTIME time;  
 29             GetLocalTime(&time);
 30             sprintf_s(sTimeBuf, "%d:%d:%d", time.wHour, time.wMinute, time.wSecond);
 31             SetTimer(hWnd, 22, 1000, NULL);//设定时器
 32 
 33             WCHAR *swTimeBuf = charToWchar(sTimeBuf);
 34             hLadle = CreateWindow(TEXT("static"), 
 35                 swTimeBuf, 
 36                 WS_CHILD | WS_VISIBLE | WS_TABSTOP, 
 37                 0, 48, 57, 16, 
 38                 hWnd, 
 39                 HMENU(21), 
 40                 ((LPCREATESTRUCT)lParam)->hInstance, NULL);
 41         }
 42         break;
 43     case WM_TIMER:
 44         {
 45             switch(wParam)
 46             {
 47             case 22:
 48                 {
 49                     SYSTEMTIME time; 
 50                     GetLocalTime(&time);
 51                     sprintf_s(sTimeBuf, "%d:%d:%d", time.wHour, time.wMinute, time.wSecond);
 52                     break;
 53                 } 
 54             default:
 55                 break;
 56             } 
 57             WCHAR *swTimeBuf = charToWchar(sTimeBuf);
 58             SetWindowText(hLadle, swTimeBuf);
 59         }
 60         break;
 61     case WM_COMMAND:
 62         wmId    = LOWORD(wParam);
 63         wmEvent = HIWORD(wParam);
 64         // 分析菜单选择:
 65         switch (wmId)
 66         {
 67         case IDC_BUTTON_CONTINUE://继续导入按钮的响应
 68             {
 69                 //MessageBox(NULL,L"继续导入",L"提示",NULL);
 70                 HWND hDialog = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, About_Dialog2);
 71 
 72                 //初始化窗口标题栏,并显示窗口
 73                 SetWindowText(hDialog,L"我的对话框啊");  
 74                 ShowWindow(hDialog,SW_SHOWNA);  
 75                 UpdateWindow(hDialog);
 76                 break;
 77             }
 78         case IDC_BUTTON_EXIT://退出按钮的响应
 79             {
 80                 //MessageBox(hWnd,L"退出按钮",L"提示",NULL);
 81                 DestroyWindow(hWnd);
 82                 break;
 83             }
 84         case IDM_ABOUT:
 85             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
 86             break;
 87         case IDM_EXIT:
 88             DestroyWindow(hWnd);
 89             break;
 90         default:
 91             return DefWindowProc(hWnd, message, wParam, lParam);
 92         }
 93         break;
 94     case WM_PAINT:
 95         hdc = BeginPaint(hWnd, &ps);
 96         // TODO: 在此添加任意绘图代码...
 97         EndPaint(hWnd, &ps);
 98         break;
 99     case WM_DESTROY:
100         PostQuitMessage(0);
101         break;
102     default:
103         return DefWindowProc(hWnd, message, wParam, lParam);
104     }
105     return 0;
106 }

将char型转换成wchar型

 1 //功     能:char字符串转化为wchar字符串
 2 WCHAR * charToWchar(const char *s)
 3 {
 4     int w_nlen=MultiByteToWideChar(CP_ACP,0,s,-1,NULL,0);
 5     WCHAR *ret;
 6     ret=(WCHAR*) malloc(sizeof(WCHAR)*w_nlen);
 7     memset(ret,0,sizeof(ret));
 8     MultiByteToWideChar(CP_ACP,0,s,-1,ret,w_nlen);
 9     return ret;
10 }

在继续导入按钮点击之后会弹出对话框,可以在系统的基础上直接改IDD_DIALOG1,也可以自己新建一个,我是复制了原来的,然后产生了新的IDIDD_DIALOG2,这个ID号在资源文件中更改,在Reaource.h中。CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG2), hWnd, About_Dialog2);

 1 // “关于”对话框2框的消息处理程序。
 2 INT_PTR CALLBACK About_Dialog2(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
 3 {
 4     UNREFERENCED_PARAMETER(lParam);
 5     int dwmId;
 6     int ret_num;
 7     switch (message)
 8     {
 9     case WM_INITDIALOG:
10         return (INT_PTR)TRUE;
11 
12     case WM_COMMAND:
13         dwmId  = LOWORD(wParam);
14         switch (dwmId)
15         {
16         case IDOK:
17             {
18               ret_num = GetDlgItemText(hDlg,IDC_EDIT1,sDialogBuf,sizeof(sDialogBuf) );
19               if (strlen((char *)sDialogBuf) <= 0 )
20               {
21                   MessageBox(NULL,L"输入为空请重新输入",L"提示",NULL);
22               }
23               else
24               {
25                   MessageBox(NULL,sDialogBuf,L"提示",NULL);
26                   EndDialog(hDlg, LOWORD(wParam));
27                   return (INT_PTR)TRUE;
28               }
29             }
30             break;
31         case IDCANCEL:
32             {
33                 EndDialog(hDlg, LOWORD(wParam));
34                 return (INT_PTR)TRUE;
35             }
36             break;
37         default:
38             break;
39         }
40     }
41     return (INT_PTR)FALSE;
42 }

 

posted @ 2017-06-16 15:49  冥天笑  阅读(6852)  评论(0编辑  收藏  举报