Windows 公共控件库研究
已知Windows公共控件庫包含工具條控件,樹視圖控件,ListView控件;參見;
https://blog.csdn.net/bcbobo21cn/article/details/106287676
https://blog.csdn.net/bcbobo21cn/article/details/106299245
https://blog.csdn.net/bcbobo21cn/article/details/106289420
來看一下此DLL是否還包含其他控件或函數;就是這個comctl32.dll;
看下還有xxxMRUxxx函數,這個應是處理 最近打開文件列表 的函數;
然后還有屬性頁控件;CreatePropertySheetPage;
DPAxxx不知道干嘛的;查了一下好像是 文檔類型......;
滾動條函數或控件;
圖像列表控件;這個和工具條配合使用的,往工具條里面添加圖標的;
然后就是些沒有名字的函數;估計沒用;
下面來創建一下屬性頁控件看看;
#include <windows.h> #include <commctrl.h> #include "resource.h"LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); BOOL CALLBACK PPYProc(HWND , UINT , WPARAM , LPARAM );HINSTANCE hInst; TCHAR szClassName[] = TEXT("ppyDemo");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_PPYDEMO);wincl.cbClsExtra = 0;wincl.cbWndExtra = 0;wincl.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);if (!RegisterClassEx (&wincl))return 0;hwnd = CreateWindowEx (0,szClassName,TEXT("ppyDemo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,400,400,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;char szBuffer[100];PROPSHEETPAGE psp={0};HPROPSHEETPAGE hsp;switch (message){case WM_COMMAND:switch (LOWORD(wParam)){case IDM_ppy://psp.pszHeaderTitle="屬性頁1";//psp.pszHeaderSubTitle="屬性頁1-001";psp.dwSize=sizeof(PROPSHEETPAGE);psp.dwFlags=PSP_DEFAULT | PSP_USETITLE|PSP_HASHELP|PSP_PREMATURE|PSP_RTLREADING;psp.hInstance=hInst;psp.pszTitle="屬性頁1";psp.pfnDlgProc=PPYProc;psp.hIcon=NULL;psp.pszIcon=NULL;hsp=CreatePropertySheetPage(&psp);//hsp=PropertySheet(&psp);wsprintf(szBuffer, "創建屬性頁控件:%x ",hsp);MessageBox(NULL,szBuffer,TEXT("創建屬性頁"),0);break;case IDM_ABOUT:MessageBox (hwnd, TEXT ("ppyDemo v1.0\nCopyright (C) 2020\n by bo"),TEXT ("ppyDemo"), MB_OK | MB_ICONINFORMATION);break;case IDM_EXIT:DestroyWindow(hwnd);break;default:return DefWindowProc(hwnd, message, wParam, lParam); }break;case WM_CREATE: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 PPYProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch(uMsg){case WM_INITDIALOG:MessageBox(NULL, "屬性頁初始化.", "", MB_OK);break; case WM_KEYDOWN:break; case WM_COMMAND:return TRUE;case WM_CLOSE:DestroyWindow(hWnd);return TRUE;case WM_DESTROY:PostQuitMessage(0);return TRUE;}return FALSE; // 如果函數不處理消息,則對話框應用程序應該返回零值。 }運行;屬性頁創建失敗返回0;創建成功;
但是屬性頁界面不會顯示;PROPSHEETPAGE結構體都已經賦值;下回再看;
菜單;
工程;
資源和頭文件;
#include "resource.h" #include <windows.h>/ // // Menu //IDC_PPYDEMO MENU BEGINPOPUP "&File"BEGINMENUITEM "創建屬性頁控件", IDM_ppyMENUITEM "E&xit", IDM_EXITENDPOPUP "&Help"BEGINMENUITEM "&About ...", IDM_ABOUTEND END #define IDM_EXIT 10001 #define IDM_ABOUT 10002#define IDC_PPYDEMO 10101 #define IDD_ABOUTBOX 10102 #define IDM_ppy 40001win32 屬性頁控件相關的參考在;這不是MFC里面的屬性頁控件;
https://docs.microsoft.com/en-us/previous-versions/ms910670(v=msdn.10)
PROPSHEETPAGE
https://docs.microsoft.com/en-us/windows/win32/api/prsht/nf-prsht-createpropertysheetpagea
CreatePropertySheetPageA function
總結
以上是生活随笔為你收集整理的Windows 公共控件库研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win32 ListView控件基本使用
- 下一篇: Win32 C 语言程序编译多个文件和在