Windows API一日一练(6)CreateWindow函数

Post date: 2012/3/27 上午 07:14:35

分类: Direct3D2007-07-13 09:20 4084人阅读 评论(0) 收藏 举报

一个窗口要显示,先要把它创建出来。那就需要调用API函数CreateWindow了,所以在注册窗口后的第二步,就需要调用创建窗口函数。

函数声明如下:

WINUSERAPI

HWND

WINAPI

CreateWindowExA(

__in DWORD dwExStyle,

__in_opt LPCSTR lpClassName,

__in_opt LPCSTR lpWindowName,

__in DWORD dwStyle,

__in int X,

__in int Y,

__in int nWidth,

__in int nHeight,

__in_opt HWND hWndParent,

__in_opt HMENU hMenu,

__in_opt HINSTANCE hInstance,

__in_opt LPVOID lpParam);

WINUSERAPI

HWND

WINAPI

CreateWindowExW(

__in DWORD dwExStyle,

__in_opt LPCWSTR lpClassName,

__in_opt LPCWSTR lpWindowName,

__in DWORD dwStyle,

__in int X,

__in int Y,

__in int nWidth,

__in int nHeight,

__in_opt HWND hWndParent,

__in_opt HMENU hMenu,

__in_opt HINSTANCE hInstance,

__in_opt LPVOID lpParam);

#ifdef UNICODE

#define CreateWindowEx CreateWindowExW

#else

#define CreateWindowEx CreateWindowExA

#endif // !UNICODE

#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,/

nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)/

CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,/

nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)

#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y,/

nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)/

CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y,/

nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)

#ifdef UNICODE

#define CreateWindow CreateWindowW

#else

#define CreateWindow CreateWindowA

#endif // !UNICODE

dwExStyle是扩展的窗口类型。

lpClassName是注册的窗口类型名称。

lpWindowName是窗口名称。

dwStyle是窗口类型。

X是窗口左上角位置。

Y是窗口左上角位置。

nWidth是窗口的宽度。

nHeight是窗口的高度。

hWndParent是父窗口。

hMenu是主菜单。

hInstance是应用程序实例句柄。

lpParam是传送给窗口的自定义参数。

调用这个函数的实例如下:

#001 //

#002 // 函数: InitInstance(HINSTANCE, int)

#003 //

#004 // 目的: 保存程序实例句柄,并创建窗口显示。

#005 //

#006 // 蔡军生 2007/07/12

#007 //

#008 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)

#009 {

#010 HWND hWnd;

#011

#012 hInst = hInstance; // 保存实例句柄到全局变量里。

#013

#014 hWnd = CreateWindow(szWindowClass,

#015 szTitle,

#016 WS_OVERLAPPEDWINDOW,

#017 CW_USEDEFAULT,

#018 0,

#019 CW_USEDEFAULT,

#020 0,

#021 NULL,

#022 NULL,

#023 hInstance,

#024 NULL);

#025

#026 if (!hWnd)

#027 {

#028 return FALSE;

#029 }

#030

#031 ShowWindow(hWnd, nCmdShow);

#032 UpdateWindow(hWnd);

#033

#034 return TRUE;

#035 }

第14行里就是调用创建窗口函数。szWindowClass是窗口注册名称,前面已经介绍过注册的。

第15行的szTitle是窗口显示的标题。

第16行是窗口显示类型。

第17行是缺省的左上角坐标。

第18行是窗口左上角坐标,由于X坐标设置为缺省的坐标了,所以会忽略这里的所有设置的值。

第19行是设置窗口的宽度。使用缺省值。

第20行同样忽略窗口的高度。

第21行是没有父窗口。

第22行是没有主菜单。

第23行是窗口当前实例句柄。

第24行是传递给窗口的自定义参数为空。

如果窗口创建成功就会返回这个窗口的句柄,否则返回空值。

通过这样设置,就可以创建各种各样的窗口,只要你自己喜欢的,就可以改变它。