使用资源文件绘制Win32对话框
以前一直以為Win32不能拖控件,現(xiàn)在才知道原來是可以的。
本文演示使用VC6創(chuàng)建一個(gè)基于對(duì)話框的Win32程序,界面使用資源文件繪制。
創(chuàng)建一個(gè)Win32應(yīng)用程序
創(chuàng)建對(duì)話框資源文件
點(diǎn)擊 File -> New -> Resource Script
創(chuàng)建了資源文件后,還要手動(dòng)將 resource.h 添加到項(xiàng)目中
創(chuàng)建對(duì)話框
選擇資源文件,右鍵如圖位置
選擇 Dialog 然后點(diǎn) New
然后就可以拖控件了,本例實(shí)現(xiàn)一個(gè)登錄界面,效果如下圖
雙擊可以設(shè)置控件的ID和顯示內(nèi)容
修改編輯框和按鈕的ID,修改后的結(jié)果可以在 resource.h 看到,VC6自動(dòng)生成了ID的宏。
顯示對(duì)話框
要使用資源文件里定義的東西,要包含頭文件
#include "resource.h"顯示對(duì)話框的函數(shù)是 DialogBox
INT_PTR DialogBox( HINSTANCE hInstance, // handle to moduleLPCTSTR lpTemplate, // dialog box templateHWND hWndParent, // handle to owner windowDLGPROC lpDialogFunc // dialog box procedure);主函數(shù)這樣寫
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; }非常簡單,比自己定義窗口類,再去注冊(cè),要簡單得多。
實(shí)現(xiàn)對(duì)話框的窗口函數(shù),和窗口一樣,對(duì)話框的窗口過程有固定的格式:
INT_PTR CALLBACK DialogProc( HWND hwndDlg, // handle to dialog boxUINT uMsg, // message WPARAM wParam, // first message parameterLPARAM lParam // second message parameter); // 對(duì)話框窗口過程 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; }運(yùn)行程序,效果圖如下
獲取文本框內(nèi)容
現(xiàn)在希望點(diǎn)擊OK按鈕,能夠獲取文本框的內(nèi)容。
要獲取文本框內(nèi)容,要先獲取文本框句柄,獲取對(duì)話框內(nèi)的控件的句柄,調(diào)用的函數(shù)是:
拿到句柄后,調(diào)用 GetWindowText 獲取文本框的字符串。
int GetWindowText( HWND hWnd, // handle to window or controlLPTSTR lpString, // text bufferint nMaxCount // maximum number of characters to copy);修改窗口過程如下,增加了判斷用戶名和密碼的邏輯
// 對(duì)話框窗口過程 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("密碼錯(cuò)誤"), TEXT("密碼錯(cuò)誤"), 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; }總結(jié)
以上是生活随笔為你收集整理的使用资源文件绘制Win32对话框的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的第一个windows应用程序
- 下一篇: 消息断点+内存断点定位窗口过程