Win32: Как создать элемент управления ListBox с помощью функции CreateWindowExW ()?

Я прошел через несколько сайтов, документов и руководств, и все они говорят об одном и том же, то есть , любой элемент управления - это не что иное, как окно в 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, 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,7,120,14,ES_AUTOHSCROLL
    EDITTEXT        IDC_NUMBER,150,7,21,14,ES_NUMBER
    LTEXT           "times.",IDC_STATIC,177,10,23,8
    LISTBOX         IDC_LIST,7,25,138,106,LBS_NOINTEGRALHEIGHT | 
                    LBS_EXTENDEDSEL | WS_VSCROLL | WS_TABSTOP
    PUSHBUTTON      "&Add",IDC_ADD,150,30,50,14
    PUSHBUTTON      "&Remove",IDC_REMOVE,150,47,50,14
    PUSHBUTTON      "&Clear",IDC_CLEAR,150,63,50,14
    LTEXT           "This item was added",IDC_STATIC,7,141,66,8
    CTEXT           "-",IDC_SHOWCOUNT,77,141,32,8
    LTEXT           "times",IDC_STATIC,114,141,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 - Каков наилучший метод / подход в этом сценарии?

5
задан Will Marcouiller 17 December 2010 в 18:00
поделиться