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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows API一日一练(17-18)DialogBox DialogBoxParam EndDialog函数

發(fā)布時間:2024/8/1 windows 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows API一日一练(17-18)DialogBox DialogBoxParam EndDialog函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

主目錄傳送門

https://blog.csdn.net/zb774095236/article/details/108291755

本次學(xué)習(xí)的源碼模板下載:

1、百度云:https://pan.baidu.com/s/1LTCURLnRitaHPKbZxbugbw??提取碼:j3fl

學(xué)習(xí)目標(biāo):

在上期的基礎(chǔ)源碼版本上 本次我們將通過自定義的快捷鍵方式 (ALT+/)再次打開一個窗口? ?

?

?


學(xué)習(xí)內(nèi)容:

一、 項目參考??

新增函數(shù)解釋?DialogBox DialogBoxParam EndDialog

1.?https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadacceleratorsa? Microsoft官方函數(shù)文檔

2.?https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadacceleratorsa?Microsoft官方函數(shù)文檔

3.https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-enddialog? ? ? ? ? ??Microsoft官方函數(shù)文檔

4.?https://docs.microsoft.com/en-us/windows/win32/dlgbox/using-dialog-boxes?Microsoft創(chuàng)建快捷鍵文檔

5.?https://blog.csdn.net/caimouse/article/details/1710834?? 大牛的Win32系列

6.https://blog.csdn.net/caimouse/article/details/1716140? ??大牛的Win32系列

二. 在往期模板上修改和新增的步驟

1.右鍵Win32API.rc

2.選中Add Resource

3.選中Dialog

4.點擊New

5.右鍵IDD_DIALOG1

6.點擊Properties

?

7.將ID:IDD_DIALOG1修改為ID:IDD_ABOUTBOX

?

?

?

2.代碼段

//庫文件 #include "Windows.h" #include "tchar.h"#include "resource.h"#define New_Add 0x01 //后續(xù)將采用宏定義的方式來標(biāo)記新增代碼段#if New_Add HINSTANCE g_hInstance;LRESULT CALLBACK ABOUTBOX_Proc(HWND hwnd, // handle to window UINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam) // second message parameter {switch (uMsg){case WM_COMMAND:switch (LOWORD(wParam)){case IDOK:// Fall through. case IDCANCEL:EndDialog(hwnd, wParam);//結(jié)束對話框return TRUE;}}return FALSE; }#endifLRESULT CALLBACK MainWndProc(HWND hwnd, // handle to window UINT uMsg, // message identifierWPARAM wParam, // first message parameterLPARAM lParam) // second message parameter {PAINTSTRUCT ps;HDC hdc;int wmId = (int)(wParam & 0xFFFF);//實驗發(fā)現(xiàn) wParam會有問題 這里做出來對應(yīng)的修改switch (uMsg){case WM_COMMAND:switch (wmId){case ID_ABOUT:MessageBox(hwnd, _T("ALT+?"), _T("你使用了快捷鍵"), MB_OK);break;case ID_EXIT://MessageBox(hwnd, _T("ALT+/"), _T("你使用了快捷鍵"), MB_OK);#if New_Add#define DialogBoxTest_1 //想要調(diào)試那個自己改一下后面的參數(shù) #if defined(DialogBoxTest_1)if (DialogBox(g_hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),hwnd,(DLGPROC)ABOUTBOX_Proc) == IDOK) #elif defined(DialogBoxTest_2)if(DialogBoxParam(g_hInstance,MAKEINTRESOURCE(IDD_ABOUTBOX),NULL, (DLGPROC)ABOUTBOX_Proc,0) == IDOK) #endif{MessageBox(hwnd, _T("確定"), _T("你使用了按鈕"), MB_OK);}else{MessageBox(hwnd, _T("取消"), _T("你使用了按鈕"), MB_OK);}#endif break;default:break;}return 0;case WM_CREATE:// Initialize the window.return 0;case WM_PAINT:// Paint the window's client area. hdc = BeginPaint(hwnd, &ps);TextOut(hdc, 0, 0, _T("Hello, Windows!"), 15);EndPaint(hwnd, &ps);return 0;case WM_SIZE:// Set the size and position of the window. return 0;case WM_DESTROY:// Clean up window-specific data objects. PostQuitMessage(0);return 0;// // Process other messages. // default:return DefWindowProc(hwnd, uMsg, wParam, lParam);//系統(tǒng)的默認消息處理函數(shù)}return 0; }//定義WinMain的入口 int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) {//沒有這些參數(shù)也不會發(fā)生警告//UNREFERENCED_PARAMETER(hInstance);UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);//UNREFERENCED_PARAMETER(nCmdShow);HACCEL hAccelTable;WNDCLASS wc; //創(chuàng)建窗口類對象//對窗口類的各屬性進行初始化wc.style = CS_HREDRAW | CS_VREDRAW; /*窗口類的風(fēng)格,CS前綴,C表示Class,S表示Style,這里使用了水平和垂直風(fēng)格*/wc.lpfnWndProc = MainWndProc; /*這里將回到函數(shù)的名字賦值用以windows后面回調(diào)*/wc.cbClsExtra = 0; //附加參數(shù),通常情況下為0wc.cbWndExtra = 0; //附加參數(shù),通常情況下為0wc.hInstance = hInstance; //窗口句柄,這里將WinMain中的hInstance句柄賦值就可wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /*窗口圖標(biāo),LoadIcon()是加載圖標(biāo),這里是加載一個系統(tǒng)資源圖標(biāo),LoadIcon()的原型是HICON LoadIcon(HINSTANCE, LPCSTR);*/wc.hCursor = LoadCursor(NULL, IDC_ARROW); /*加載鼠標(biāo),同上相似*/wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); /*窗口畫刷,這里是使用的白色畫刷,所以創(chuàng)建出來的窗口的背景顏色則是白色的*/wc.lpszMenuName = _T("MainMenu"); //窗口菜單名稱,這里沒有菜單,設(shè)為NULLwc.lpszClassName = _T("MainWindowClass"); //窗口類名稱,這個窗口類名稱可作為這個窗口的唯一標(biāo)識/*注冊窗口類*/if (!RegisterClass(&wc)){//注冊窗口類失敗時,彈出提示MessageBox(NULL, TEXT("This program requires Window NT!"), _T("MainWindowClass"), MB_ICONERROR);return FALSE;}/*創(chuàng)建窗口HWND CreateWindow(LPCTSTR lpClassName, //窗口類名LPCTSTR lpWindowName, //窗口標(biāo)題DWORD dwStyle, //窗口風(fēng)格,WS開頭int x, //窗口左上角x坐標(biāo)int y, //窗口左上角y坐標(biāo)int nWidth, //窗口寬度int nHeight, //窗口高度HWND hWndParent, //父窗口句柄HMENU hMenu, //菜單句柄HANDLE hlnstance, //窗口句柄LPVOID lpParam); //改值會傳遞給窗口WM_CREATE消息的一個參數(shù)*/HWND hwnd; //創(chuàng)建窗口函數(shù)CreateWindow()會返回一個HWND句柄,這里定義下,用來接收這個句柄hwnd = CreateWindow(_T("MainWindowClass"), //窗口類名TEXT(" Hello Win32API"), //窗口標(biāo)題,會在窗口的左上角標(biāo)題欄顯示W(wǎng)S_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL, //窗口風(fēng)格CW_USEDEFAULT, //窗口左上角x位置,這里使用的系統(tǒng)默認值,可自定義CW_USEDEFAULT, //窗口左上角y位置CW_USEDEFAULT, //窗口的寬度CW_USEDEFAULT, //窗口的高度NULL, //該窗口的父窗口或所有者窗口的句柄,這里用不到,設(shè)為NULLNULL, //窗口菜單句柄,這里沒有菜單,設(shè)置為NULLhInstance, //窗口句柄NULL //傳遞給窗口WM_CREATE消息的一個參數(shù),這里不用,設(shè)置為NULL);/*顯示窗口,顯示方式使用WinMain的參數(shù)*/ShowWindow(hwnd, nCmdShow);/*更新窗口*/UpdateWindow(hwnd);hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_TESTWIN));//自己定義的快捷鍵表#if New_Addg_hInstance = hInstance;//得到全局窗口的句柄#endifMSG msg;// 主消息循環(huán):while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))//用來處理快捷鍵{TranslateMessage(&msg);//把虛鍵消息翻譯成字符消息(WM_CHAR)//再把WM_CHAR消息放到消息隊列中去DispatchMessage(&msg);//指示操作系統(tǒng)把這條消息發(fā)到窗口//過程MainWndProc 進行處理}}return 0;}

?


項目下載地址:

1.百度云:https://pan.baidu.com/s/1XqTLTQ2Noa72VgHeYQtUQw??提取碼:6lzt

留在最后

我對代碼沒有過多的解釋 我提供了簡單的注釋 和官方文檔 希望以這種方式加強實戰(zhàn)能力

總結(jié)

以上是生活随笔為你收集整理的Windows API一日一练(17-18)DialogBox DialogBoxParam EndDialog函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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