【发布时间】:2011-05-27 06:48:26
【问题描述】:
我浏览过多个站点、文档和教程,它们都说相同,即任何控件都只不过是 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 - 在这种情况下最佳实践/方法是什么?
【问题讨论】:
-
编写这种代码从来都不是一个好主意,有很多优秀的类库可以消除乏味和错误。想学Win32的汇编语言也没关系。不过,这不是一个非常引人注目的问题。
-
我不打算使用 Win32 编写完整的企业系统。我喜欢 C,并且一直想了解更多关于 Win32 的信息。回到我开始学习编程的时候,Win32 对我来说太复杂了,无法学习。今天,我完全理解了背后的概念,所以我更容易学习。由于 .NET Framework 是基于 Win32 的,我希望了解更多。
标签: c listbox winapi createwindow