HWND CreateWindow(
LPCTSTR lpClassName, // 指向注册窗口类名的指针
LPCTSTR lpWindowName, // 指向窗口名的指针
DWORD dwStyle, // 窗口样式
int x, // 窗口水平位置
int y, // 窗口垂直位置
int nWidth, // 窗口宽度
int nHeight, // 窗口高度
HWND hWndParent, // 父窗口句柄
HMENU hMenu, // 菜单句柄
HANDLE hInstance, // 应用程序实例句柄
LPVOID lpParam // 指向创建窗口所需的数据
);
返回值:如果成功就返回新窗口的句柄;失败则返回NULL值
HWND CreateWindowEx(
DWORD dwExStyle, // 扩展窗口样式
LPCTSTR lpClassName, // 指向注册窗口类名的指针
LPCTSTR lpWindowName, // 指向窗口名的指针
DWORD dwStyle, // 窗口样式
int x, // 窗口水平位置
int y, // 窗口垂直位置
int nWidth, // 窗口宽度
int nHeight, // 窗口高度
HWND hWndParent, // 父窗口句柄
HMENU hMenu, // 菜单句柄
HINSTANCE hInstance, // 应用程序实例句柄
LPVOID lpParam // 指向创建窗口所需的数据
);
返回值:如果成功就返回新窗口的句柄;失败则返回NULL值
几个参数的说明:
lpClassName 窗口类别的名字,可以是自己通过RegisterClassEx注册的,也可以是系统内置的窗口类如"BUTTON"、"COMBOBOX"等。
int x 窗口水平位置,在这个值填CW_USEDEFAULT的情况下,如果是重叠式窗口则下一个参数被忽略(填什么都没用);如果是弹出式窗口或子窗口则这个参数跟下一个参数(即窗口左上角坐标)均作为0。
int nWidth 窗口宽度,在这个值填CW_USEDEFAULT的情况下,如果是重叠式窗口则下一个参数被忽略(填什么都没用);如果是弹出式窗口或子窗口则这个参数跟下一个参数(即窗口的宽跟高)均作为0。
HMENU hMenu 如果是重叠式窗口或弹出式窗口就是菜单句柄,如果是子窗口(控件)就是控件的ID。在给父窗口发送消息时这个ID会传递过去。
LPVOID lpParam 指向创建窗口所需的数据。这个函数返回之前会发出消息WM_CREATE,这个消息的LPARAM会带上一个参数,参数的内容就是本参数的内容,本参数的原类型是CREATESTRUCT。不用也罢。
例子:
hWnd = CreateWindow(
szWindowClass,
szTitle,
WS_OVERLAPPED | WS_SYSMENU,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL
);
CreateWindow (
"BUTTON",
"TEST",
WS_VISIBLE|WS_CHILD,
10,
10,
100,
20,
hWnd,
(HMENU)IDC_BUTTON1,
hInst,
NULL
);
几种窗口样式的说明:
WS_POPUP 没有标题,没有边框,没有系统菜单,没有关闭按钮,你很可能要在任务管理器中关闭窗口。
WS_POPUPWINDOW 仅比WS_POPUP多了一个细细的边框。
WS_OVERLAPPED 有标题,有边框,没有系统菜单,没有关闭按钮,你很可能要在任务管理器中关闭窗口。
WS_OVERLAPPEDWINDOW 有标题,有边框,有系统菜单,有关闭按钮。