首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >In GetClientRect rect.bottom rect.right不正确

In GetClientRect rect.bottom rect.right不正确
EN

Stack Overflow用户
提问于 2012-01-31 13:28:40
回答 1查看 1.3K关注 0票数 0

我正在创建一个程序,其中我想在窗口的右下角放置一个按钮。我使用GetClientRect来获取窗口的顶部、底部、右侧和左侧。顶部和左侧工作正常,但底部和右侧不工作。下面是我的代码:

代码语言:javascript
复制
WNDCLASSEX Program;
/*Class declaration*/
hWndMain = CreateWindowEx (WS_EX_APPWINDOW,
                        "Program",
                        "Program",
                        WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
                        GetSystemMetrics(SM_CXSCREEN)/2-210,
                        GetSystemMetrics(SM_CYSCREEN)/2-135,
                        420,270,
                        HWND_DESKTOP,
                        NULL,hInstance,NULL);
//Window Procedure
WM_CREATE:
{
 RECT MaxSize;
 GetClientRect(hWndMain,&MaxSize);

 /*Menu declaration using CreateMenu, AppendMenu etc*/

 HWND hCalculate = CreateWindowEx(0,WC_BUTTON,
                                           "Calculate",
                                           WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_DEFPUSHBUTTON | 0x00000001,
                                           MaxSize.right-156,MaxSize.bottom-51,140,30,
                                           hWnd,(HMENU)IDC_BUTTON1,
                                           GetModuleHandle(NULL), 0);
}

编译代码并运行程序后,我看不到该按钮。请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-31 15:10:51

对hWndMain的赋值看起来像是在您的主线代码中:

代码语言:javascript
复制
hWndMain = CreateWindowEx (WS_EX_APPWINDOW,

虽然这是在WndProc中:

代码语言:javascript
复制
//Window Procedure
WM_CREATE:
{
    ...
    GetClientRect(hWndMain,&MaxSize);

但是,WM_CREATE消息是在对CreateWindow的调用中接收和处理的,因此它尚未返回,因此尚未对hWndMain进行赋值。因此,您可能会使用无效或空的hWndMain调用GetClientRect(),并且它可能会失败并返回一个您忽略的错误。相反,可以使用传递给WndProc的hwnd参数。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9074861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档