日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

直接用Win32 API创建对话框Demo

發(fā)布時(shí)間:2025/4/14 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 直接用Win32 API创建对话框Demo 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Win32 API包含有對(duì)話框函數(shù);

Win10,CFree 5.0;新建一個(gè)窗口工程;

先看一下CFree自帶對(duì)話框編輯器;其保存為.DRES;還不知道怎么加入工程;先不管;

#include <windows.h> #include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK DialogProc(HWND , UINT , WPARAM , LPARAM );HINSTANCE hInst; TCHAR szClassName[] = TEXT("createDialogDemo");int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil) {HWND hwnd;MSG messages;WNDCLASSEX wincl;hInst = hThisInstance;wincl.hInstance = hThisInstance;wincl.lpszClassName = szClassName;wincl.lpfnWndProc = WindowProcedure;wincl.style = CS_DBLCLKS;wincl.cbSize = sizeof (WNDCLASSEX);wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);wincl.hCursor = LoadCursor (NULL, IDC_ARROW);wincl.lpszMenuName = MAKEINTRESOURCE (IDC_CREATEDIALOGDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("createDialogDemo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,200,HWND_DESKTOP,NULL,hThisInstance,NULL);ShowWindow (hwnd, nFunsterStil);while (GetMessage (&messages, NULL, 0, 0)){TranslateMessage(&messages);DispatchMessage(&messages);}return messages.wParam; }LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {PAINTSTRUCT ps;HDC hdc;RECT rt;int ret;HWND hWndDlg = NULL;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_CreateDialog:hWndDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_TESTDIALOG1), NULL, DialogProc, NULL);if(hWndDlg == NULL){MessageBox(NULL, "創(chuàng)建對(duì)話框失敗.", "", MB_OK);return 0;}break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("createDialogDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("createDialogDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_PAINT:hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rt); EndPaint(hwnd, &ps);break;case WM_DESTROY:PostQuitMessage (0);break;default:return DefWindowProc (hwnd, message, wParam, lParam);}return 0; }BOOL CALLBACK DialogProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, "對(duì)話框初始化.", "", MB_OK);break;case WM_KEYDOWN:break; case WM_COMMAND:if(LOWORD(wParam) == IDOK){ }else if(LOWORD(wParam) == IDCANCEL){}return TRUE;case WM_CLOSE:DestroyWindow(hWnd);return TRUE;case WM_DESTROY:PostQuitMessage(0);return TRUE;}return FALSE; // 如果函數(shù)不處理消息,則對(duì)話框應(yīng)用程序應(yīng)該返回零值。 }

創(chuàng)建對(duì)話框使用;

hWndDlg = CreateDialogParam(hInst, MAKEINTRESOURCE(IDD_TESTDIALOG1), NULL, DialogProc, NULL);

第一個(gè)參數(shù)是實(shí)例句柄,在文件頭部定義了全局變量,

HINSTANCE hInst;

在WinMain中對(duì)hInst賦值;CreateDialogParam函數(shù)需要一個(gè)對(duì)話框過程,過程要預(yù)先聲明;

BOOL CALLBACK DialogProc(HWND , UINT , WPARAM , LPARAM );

對(duì)話框過程中沒有處理代碼;只是在?WM_INITDIALOG 消息中彈出一個(gè)消息框;

程序運(yùn)行如上圖;在?WM_INITDIALOG 消息中彈出了消息框;但是CreateDialogParam創(chuàng)建的對(duì)話框沒有顯示;下回再看;

CreateDialogParam第二個(gè)參數(shù)是對(duì)話框資源ID,MAKEINTRESOURCE(IDD_TESTDIALOG1);

單擊菜單時(shí)創(chuàng)建對(duì)話框;

頭文件和資源文件;

#define IDM_EXIT 10001 #define IDM_ABOUT 10002#define IDC_CREATEDIALOGDEMO 10101 #define IDD_ABOUTBOX 10102 #define IDM_CreateDialog 20001 #define IDD_TESTDIALOG1 1001 #include "resource.h" #include <windows.h>/ // // Menu //IDC_CREATEDIALOGDEMO MENU BEGINPOPUP "&File"BEGINMENUITEM "創(chuàng)建對(duì)話框", IDM_CreateDialogMENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND END// // Dialog //IDD_TESTDIALOG1 DIALOG DISCARDABLE 0, 0, 250, 75 CAPTION "測試對(duì)話框1" STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU FONT 9, "宋體" BEGINEND

把下面兩句加到.rc文件,IDD_TESTDIALOG1中,BEGIN...END里面;會(huì)出錯(cuò);這兩句是從VC里面拷過來的;看上去沒問題;

? ? LTEXT ? ? ? ? ? "dialogDemo1 1.0 版",IDC_STATIC,40,10,119,8
? ? LTEXT ? ? ? ? ? "對(duì)話框測試",IDC_STATIC,40,25,119,8

工程如下;下回再看;

Win32 API 的 CreateDialogParam 說明如下:

?函數(shù)功能:該函數(shù)根據(jù)對(duì)話框模板資源創(chuàng)建一個(gè)無模式的對(duì)話框。在顯示對(duì)話框之前,函數(shù)把一個(gè)應(yīng)用程序定義的值作為WM_INITDIALOG消息IParam參數(shù)傳到對(duì)話框過程應(yīng)用程序可用此值來初始化對(duì)話框控制。

????函數(shù)原型:HWND CreateDialogParam(HINSTANCE hlnstancem,LPCTSTR IpTemplateName,HWND hWndParent,DLGPROCIpDialogFunc, LPARAM dwlniParam);

????參數(shù):

????hlnstance:標(biāo)識(shí)一個(gè)模塊的事例,該模塊的可執(zhí)行文件含有對(duì)話框模板。

????IpTemplateName:標(biāo)識(shí)對(duì)話框模板。此參數(shù)可以指向一個(gè)以NULL結(jié)尾的字符串的指針,該字符串指定對(duì)話框模板名,或是指定對(duì)話框模板的資源標(biāo)識(shí)符的一個(gè)整型值。如果此參數(shù)指定了一個(gè)資源標(biāo)識(shí)符,則它的高位字一定為零且低位字一定含有標(biāo)識(shí)符。一定用MAKENTRESOURDE宏指令創(chuàng)建此值。

????HwndParent:指定擁有對(duì)話框的窗口。

????IpDialogFunc:指向?qū)υ捒蜻^程的指針。有關(guān)對(duì)話框過程的更詳細(xì)的信息,請(qǐng)參見DialogProc。

????dwlnitParam:指定傳遞到WM_INITDIALOG消息的IParam參數(shù)中的對(duì)話框過程的值。

????返回值:如果函數(shù)調(diào)用成功則返回值為指向?qū)υ捒虻拇翱诰浔H绻瘮?shù)調(diào)用失敗則返回值為NULL。

????若想獲得更多錯(cuò)誤信息,請(qǐng)調(diào)用GetlastError函數(shù)。

????備注:CreateoialogParam函數(shù)用 CreateWindowEx函數(shù)創(chuàng)建對(duì)話框。CreateDialogParam函數(shù)然后把一個(gè)WM_INITDIALOG消息(和一個(gè)WM_SETFONT消息,如果模板指定DS SETFONT類型)傳遞到對(duì)話框過程。如果模板指定WS_VISIBLE類型,則函數(shù)顯示對(duì)話框,最后CreateDialogParam返回對(duì)話框的窗口句柄。

????CreateDialogParam返回之后應(yīng)用程序用ShowWindow顯示對(duì)話框(如果還沒有顯示)。應(yīng)用程序用DestroyWindoW函數(shù)來清除對(duì)話框。

????Windows 95和以后版本:系統(tǒng)可支持每個(gè)對(duì)話框模板中最多255個(gè)控制。為把大于255個(gè)的控制放入對(duì)話框,需要在WM_INITDIALOG消息處理器中創(chuàng)建控制,而不是把他們放入模板中。

????Windows CE:IPTemplateName參數(shù)指向的對(duì)話框模板中DLGTEMPLATE結(jié)構(gòu)并不支持所有的類型。

????速查:Windows NT:3.1 及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;頭文件;winuser.h;庫文件:use32.lib;Unicode:在Windows NT上實(shí)現(xiàn)為Unicode和ANSI兩種版本。

總結(jié)

以上是生活随笔為你收集整理的直接用Win32 API创建对话框Demo的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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