使用资源文件绘制Win32对话框
生活随笔
收集整理的這篇文章主要介紹了
使用资源文件绘制Win32对话框
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前一直以為Win32不能拖控件,現在才知道原來是可以的。
本文演示使用VC6創建一個基于對話框的Win32程序,界面使用資源文件繪制。
創建一個Win32應用程序
創建對話框資源文件
點擊 File -> New -> Resource Script
創建了資源文件后,還要手動將 resource.h 添加到項目中
創建對話框
選擇資源文件,右鍵如圖位置
選擇 Dialog 然后點 New
然后就可以拖控件了,本例實現一個登錄界面,效果如下圖
雙擊可以設置控件的ID和顯示內容
修改編輯框和按鈕的ID,修改后的結果可以在 resource.h 看到,VC6自動生成了ID的宏。
顯示對話框
要使用資源文件里定義的東西,要包含頭文件
#include "resource.h"顯示對話框的函數是 DialogBox
INT_PTR DialogBox( HINSTANCE hInstance, // handle to moduleLPCTSTR lpTemplate, // dialog box templateHWND hWndParent, // handle to owner windowDLGPROC lpDialogFunc // dialog box procedure);主函數這樣寫
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {// TODO: Place code here.DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG_MAIN), NULL, DialogProc);return 0; }非常簡單,比自己定義窗口類,再去注冊,要簡單得多。
實現對話框的窗口函數,和窗口一樣,對話框的窗口過程有固定的格式:
INT_PTR CALLBACK DialogProc( HWND hwndDlg, // handle to dialog boxUINT uMsg, // message WPARAM wParam, // first message parameterLPARAM lParam // second message parameter); // 對話框窗口過程 BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, TEXT("WM INITDIALOG"), TEXT("INIT"), MB_OK);return TRUE;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_BUTTON_OK:MessageBox(NULL, TEXT("OK"), TEXT("OK"), MB_OK);return TRUE;case IDC_BUTTON_CANCEL:MessageBox(NULL, TEXT("CANCEL"), TEXT("CANCEL"), MB_OK);EndDialog(hDlg, 0);return TRUE;}return TRUE;}return FALSE; }運行程序,效果圖如下
獲取文本框內容
現在希望點擊OK按鈕,能夠獲取文本框的內容。
要獲取文本框內容,要先獲取文本框句柄,獲取對話框內的控件的句柄,調用的函數是:
拿到句柄后,調用 GetWindowText 獲取文本框的字符串。
int GetWindowText( HWND hWnd, // handle to window or controlLPTSTR lpString, // text bufferint nMaxCount // maximum number of characters to copy);修改窗口過程如下,增加了判斷用戶名和密碼的邏輯
// 對話框窗口過程 BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hEditUsername;HWND hEditPassword;TCHAR lpszUserName[128];TCHAR lpszPassword[128];switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, TEXT("WM INITDIALOG"), TEXT("INIT"), MB_OK);return TRUE;case WM_COMMAND:switch(LOWORD(wParam)){case IDC_BUTTON_OK://MessageBox(NULL, TEXT("OK"), TEXT("OK"), MB_OK);hEditUsername = GetDlgItem(hDlg, IDC_EDIT_USERNAME);hEditPassword = GetDlgItem(hDlg, IDC_EDIT_PASSWORD);GetWindowText(hEditUsername, lpszUserName, 128);GetWindowText(hEditPassword, lpszPassword, 128);if (strcmp(lpszUserName, TEXT("admin")) == 0 && strcmp(lpszPassword, TEXT("123")) == 0){MessageBox(NULL, TEXT("密碼正確"), TEXT("密碼正確"), MB_OK);}else{MessageBox(NULL, TEXT("密碼錯誤"), TEXT("密碼錯誤"), MB_OK);}return TRUE; case IDC_BUTTON_CANCEL:MessageBox(NULL, TEXT("CANCEL"), TEXT("CANCEL"), MB_OK);EndDialog(hDlg, 0);return TRUE;}return TRUE;}return FALSE; }總結
以上是生活随笔為你收集整理的使用资源文件绘制Win32对话框的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的第一个windows应用程序
- 下一篇: 消息断点+内存断点定位窗口过程