我正在创建一个程序,其中我想在窗口的右下角放置一个按钮。我使用GetClientRect来获取窗口的顶部、底部、右侧和左侧。顶部和左侧工作正常,但底部和右侧不工作。下面是我的代码:
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);
}编译代码并运行程序后,我看不到该按钮。请帮帮忙。
发布于 2012-01-31 15:10:51
对hWndMain的赋值看起来像是在您的主线代码中:
hWndMain = CreateWindowEx (WS_EX_APPWINDOW,虽然这是在WndProc中:
//Window Procedure
WM_CREATE:
{
...
GetClientRect(hWndMain,&MaxSize);但是,WM_CREATE消息是在对CreateWindow的调用中接收和处理的,因此它尚未返回,因此尚未对hWndMain进行赋值。因此,您可能会使用无效或空的hWndMain调用GetClientRect(),并且它可能会失败并返回一个您忽略的错误。相反,可以使用传递给WndProc的hwnd参数。
https://stackoverflow.com/questions/9074861
复制相似问题