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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM