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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用资源文件绘制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按鈕,能夠獲取文本框的內容。
要獲取文本框內容,要先獲取文本框句柄,獲取對話框內的控件的句柄,調用的函數是:

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

拿到句柄后,調用 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对话框的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。