Win32:如何使用CreateWindowExW()函数创建ListBox控件?
发布时间:2020-12-14 02:55:35 所属栏目:Windows 来源:网络整理
导读:我经历过多个站点,文档和教程,他们都说同样的,也就是说,任何控件只不过是Win32 API中的一个窗口,因此可以使用CreateWindowExW()函数创建一个ListBox控件/窗口在主应用程序窗口上. 虽然我将所有控件的概念都视为具有不同dwStyle的窗口,但我很难找到如何实例化
我经历过多个站点,文档和教程,他们都说同样的,也就是说,任何控件只不过是Win32 API中的一个窗口,因此可以使用CreateWindowExW()函数创建一个ListBox控件/窗口在主应用程序窗口上.
虽然我将所有控件的概念都视为具有不同dwStyle的窗口,但我很难找到如何实例化ListBox控件. 我遇到了一个教程,其中编写了一个对话框,在其声明中指定了LISTBOX,如下所示: // resource.h #define IDD_MAIN 101 #define IDC_TEXT 1000 #define IDC_NUMBER 1001 #define IDC_LIST 1002 #define IDC_ADD 1003 #define IDC_CLEAR 1004 #define IDC_REMOVE 1005 #define IDC_SHOWCOUNT 1006 // .rc resource file IDD_MAIN DIALOG DISCARDABLE 0,207,156 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Controls One" FONT 8,"MS Sans Serif" BEGIN LTEXT "Add",IDC_STATIC,7,10,14,8 EDITTEXT IDC_TEXT,25,120,ES_AUTOHSCROLL EDITTEXT IDC_NUMBER,150,21,ES_NUMBER LTEXT "times.",177,23,8 LISTBOX IDC_LIST,138,106,LBS_NOINTEGRALHEIGHT | LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "&Add",IDC_ADD,30,50,14 PUSHBUTTON "&Remove",IDC_REMOVE,47,14 PUSHBUTTON "&Clear",IDC_CLEAR,63,14 LTEXT "This item was added",141,66,8 CTEXT "-",IDC_SHOWCOUNT,77,32,8 LTEXT "times",114,17,8 END 并在他的C程序中使用它如下: int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { return DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,DlgProc); } 现在,我能够做到并完全理解这些概念.另外,我希望能够创建和设计我的主应用程序窗口以添加ListBox控件.本教程示例不使用CreateWindowExW()函数来创建控件,而是创建一个实际上是主应用程序窗口的对话框. 1 – 关于如何在代码中向主窗口添加ListBox控件的任何线索? 我想在处理WM_CREATE消息时创建它. 2 – 这是个好主意吗? 3 – 在这种情况下,最佳做法/方法是什么? 解决方法
要在Win32中动态创建控件,您需要以下代码:
HWND hBtn,hLabel,hListbox,hTextBox; void InitializeComponent(HWND hWnd) { HINSTANCE hInstance = GetModuleHandle(NULL); // Adding a Button. hBtn = CreateWindowExW(WS_EX_APPWINDOW,L"BUTTON",WS_CHILD | WS_VISIBLE,327,70,hWnd,hInstance,NULL); SetWindowTextW(hBtn,L"&Button"); // Adding a Label. hLabel = CreateWindowExW(WS_EX_CLIENTEDGE,L"STATIC",NULL); SetWindowTextW(hLabel,L"Label:"); // Adding a ListBox. hListBox = CreateWindowExW(WS_EX_CLIENTEDGE,L"LISTBOX",WS_CHILD | WS_VISIBLE | ES_VSCROLL | ES_AUTOVSCROLL,35,300,200,NULL); // Adding a TextBox. hTextBox = CreateWindowExW(WS_EX_CLIENTEDGE,L"EDIT",WS_CHILD | WS_VISIBLE | ES_AUTOVSCROLL,62,245,NULL); SetWindowTextW(hTextBox,L"Input text here..."); } LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam) { switch (Msg) { case WM_CREATE: InitializeComponent(hWnd); break; default: return DefWindowProcW(hWnd,Msg,wParam,lParam); } } int WINAPI WinMain(HINSTANCE hInstance,int nShowCmd) { // Declaring,defining,registering and creating window here... // Note that each Window/Control has to have its own Message handling function. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容