加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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.
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读