日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用资源文件绘制Win32对话框

發(fā)布時(shí)間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用资源文件绘制Win32对话框 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以前一直以為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ù)是:

HWND GetDlgItem(HWND hDlg, // handle to dialog boxint nIDDlgItem // control identifier );

拿到句柄后,調(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。