CreateWindow

窗口类(好像是wndclass窗口类结构)定义了窗口的一般特征,因此可以使用同一窗口类创建许多不同的窗口。

而调用CreateWindow创建窗口时,可能指定有关窗口的更详细的信息。

注:新的Windows程序员有时会混淆窗口类和窗口之间的区别,以及为什么一个窗口的所有特征不能被一步到位地指定。实际上,以这种方式分开这些风格信息是非常方便的。例如,所有的按钮窗口都可以基于同样的窗口类来创建。与这个窗口类相关的窗口过程位于Windows内部。由窗口类来负责处理按钮的键盘和鼠标输入,并定义按钮在屏幕上的外观形象。从这一点看来,所有的按钮都是以同样的方式工作的。但是并非所有的按钮都是一样的。它们可以有不同的大小,不同的屏幕位置,以及不同的正文串。下面这样一些特征是窗口定义的一部分,而不是窗口类定义的。

 

    hwnd = CreateWindow (szAppName,                  // window class name
                          TEXT ("The Hello Program"), // window caption
                          WS_OVERLAPPEDWINDOW,        // window style
                          CW_USEDEFAULT,              // initial x position
                          CW_USEDEFAULT,              // initial y position
                          CW_USEDEFAULT,              // initial x size
                          CW_USEDEFAULT,              // initial y size
                          NULL,                       // parent window handle
                          NULL,                       // window menu handle
                          hInstance,                  // program instance handle
                          NULL) ;                     // creation parameters

参数一:szAppName,                  // window class name

这是程序注册的窗口类名称,这就是如何把我们正在创建的窗口与一个窗口类相联结的方式

 

参数二:TEXT ("The Hello Program"), // window caption

这是窗口的标题,即显示在窗口的标题栏上的信息

 

参数三:WS_OVERLAPPEDWINDOW,        // window style

这是窗口风格,其宏定义如下:

#define WS_OVERLAPPEDWINDOW (            //多种窗口类型的组合,即如下样式的组合

                             WS_OVERLAPPED     | /    //产生一个层叠的窗口,一个层叠的窗口有一个标题栏和一个边框。
                             WS_CAPTION        | /                      //创建一个有标题栏的窗口。
                             WS_SYSMENU        | /                    //创建一个在标题栏上带有系统菜单的窗口,要和WS_CAPTION类型一起使用。
                             WS_THICKFRAME     | /                //创建一个具有可调边框的窗口。
                             WS_MINIMIZEBOX    | /                 //创建一个具有最小化按钮的窗口,必须同时设定WS_ SYSMENU类型。
                             WS_MAXIMIZEBOX)                      //创建一个具有最大化按钮的窗口,必须同时设定WS_ SYSMENU类型。

 

参数四 和 参数五                         

CW_USEDEFAULT,              // initial x position

CW_USEDEFAULT,              // initial y position

在WINUSER.H中的宏定义如下所示

#define CW_USEDEFAULT       ((int)0x80000000)

为“初始x位置”和“初始y位置”的参数,指定了窗口左上角相对于屏幕左上角的初始位置。其中CW_USEDEFAULT定义为0x80000000,默认情况下,大概使用默认的位置。(好像以像素为单位,x为水平,y为竖直)

 

参数六 和 参数七

CW_USEDEFAULT,              // initial x size
CW_USEDEFAULT,              // initial y size

指定窗口的宽度和高度(同上,即好像以像素为单位,x为水平,y为竖直)

 

参数八: NULL,                       // parent window handle

为“父窗口句柄”,一般为NULL,如果有窗口之间存在父子关系,则子窗口总是出现在父窗口的上面。但应用程序窗口出现在桌面窗口的上面时,不必为调用CreateWindow而找出桌面窗口的句柄。

 

参数九:NULL,                       // window menu handle

为“窗口菜单句柄”,如没有菜单则为NULL

 

参数十:hInstance,                  // program instance handle

为“程序实例句柄”,设置为实例句柄,它是作为WinMain的参数传递给这个程序的。

 

参数十一:NULL                   // creation parameters

 “创建参数”指针,设置为NULL,可以用这个指针访问以后想要引用的程序中的数据

 

最后CreateWindow调用返回被创建的窗口的句柄,该句柄存放在变量hwnd中,它被定义为HWND类型(“窗口句柄类型”)。注:Windows中的每个窗口都有一个句柄,程序用句柄来引用窗口。许多Windows函数需要使用hwnd作为参数,这样,Windows才能知道函数是针对哪个窗口的。如果一个程序创建了许多窗口,则每个窗口均有一个句柄。窗口句柄是Windows程序处理的最重要的句柄之一。

好的,下面是一个简单的 Win32 API 程序,它演示了如何创建一个窗口,并在窗口中显示文本: ```c++ #include <windows.h> // 窗口过程 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(0); return 0; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hwnd, &ps); // 绘制文本 TextOut(hdc, 10, 10, "Hello, world!", 13); EndPaint(hwnd, &ps); } return 0; } return DefWindowProc(hwnd, uMsg, wParam, lParam); } // 程序入口点 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { // 注册窗口类 WNDCLASS wc = { 0 }; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = "MyWindowClass"; RegisterClass(&wc); // 创建窗口 HWND hwnd = CreateWindow( "MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (hwnd == NULL) { MessageBox(NULL, "Failed to create window", "Error", MB_OK | MB_ICONERROR); return 1; } // 显示窗口 ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ``` 这个程序使用了 Win32 API 来创建一个窗口,并在窗口中显示了文本。在程序入口点 `WinMain` 中,首先注册了一个窗口类,然后创建了一个窗口,并显示出来。接着进入消息循环,等待消息的到来,然后处理消息。在窗口过程 `WindowProc` 中,处理了窗口销毁和绘制消息。在绘制消息中,使用了 `TextOut` 函数来绘制文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值