使用CreateWindowEx创建子窗口的注意事项

比如: 

使用 HWND child = CreateWindowEx(0,L"childclass",NULL,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,100, 100, 500, 500,hWnd,(HMENU)(1),hInst,NULL);创建子窗口时会出现1407的错误提示,然后返回空句柄

这是因为没有注册子窗口,所以你必须先注册:

 WNDCLASS mywndclass;

 mywndclass.style        = CS_HREDRAW | CS_VREDRAW;
 mywndclass.lpfnWndProc = HelloWndProc;
 mywndclass.cbClsExtra   = 0;
 mywndclass.cbWndExtra = sizeof(long);
 mywndclass.hInstance    = hInstance;
 mywndclass.hIcon        = LoadIcon (NULL, IDI_APPLICATION);
 mywndclass.hCursor  = LoadCursor (NULL, IDC_ARROW);
 mywndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
 mywndclass.lpszMenuName = NULL;
 mywndclass.lpszClassName = L"childclass";

if (!RegisterClass (&mywndclass))
    {
        MessageBox (NULL, TEXT ("RegisterClass  failed"),
                    NULL, MB_ICONERROR);
        return 0;
    }

再创建回调函数HelloWndProc, 这样就可以了。

如果你想使用系统定义的注册类,比如静态控件,按钮之类的,可以这样写:

HWND child = CreateWindowEx(0,L"static",NULL,WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS,100, 100, 500, 500,hWnd,(HMENU)(1),hInst,NULL);

如果你想自定义控件,就是控件里的内容都是自己设计,那么你可以使用SetWindowSubClass,具体案例可以参考:使用更安全的方法去子类化控件

Windows API中,`CreateWindowEx`函数用于创建一个窗口,并且该窗口的样式是矩形的。如果你想要创建一个窗口,其四个角为圆角,则需要借助一些额外的步骤和技巧,因为标准的`CreateWindowEx`并没有直接提供圆角窗口的功能。 要创建一个圆角窗口,你可以采取以下步骤: 1. **创建窗口**:首先使用`CreateWindowEx`创建一个标准的矩形窗口。 2. **绘制圆角**:在窗口消息处理函数中,比如`WM_PAINT`消息的处理中,使用GDI函数来绘制圆角。这可以通过使用`RectangleRgn`函数结合`CreateRoundRectRgn`来创建一个圆角区域,并使用`FillRgn`函数来填充这个区域。但这种方式可能不适用于所有情况,比如窗口边框或者标题栏部分。 3. **使用扩展样式**:`CreateWindowEx`函数提供了扩展样式参数`dwExStyle`,你可以通过设置`WS_EX_COMPOSITED`样式来启用窗口的混合模式,然后使用`UpdateLayeredWindow`函数和相关位图来实现真正的圆角效果。 一个简单的例可能需要结合Windows GDI编程和GDI+来实现更复杂的视觉效果,如圆角和渐变背景等。可以使用GDI+的画笔和路径来绘制圆角矩形,并将其绘制到窗口客户区。 代码示例可能如下: ```c HRGN CreateRoundRectRgn( int nLeftRect, // x-coordinate of upper-left corner int nTopRect, // y-coordinate of upper-left corner int nRightRect, // x-coordinate of lower-right corner int nBottomRect, // y-coordinate of lower-right corner int nWidthEllipse, // width of ellipse int nHeightEllipse // height of ellipse ); ``` 请注意,具体实现将需要处理窗口绘制逻辑和可能的兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值