2012-01-31 7 views
0

私は、ウィンドウの右下隅にボタンを配置したいプログラムを作成しています。私はGetClientRectを使って、ウィンドウの上下左右を取得しています。上部と左は正常に動作していますが、下部と右が機能していません。私のコードは次のとおりです。In GetClientRect rect.bottom rect.right not correct

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); 
} 

コードをコンパイルしてプログラムを実行すると、ボタンが表示されません。助けてください。

hWndMain = CreateWindowEx (WS_EX_APPWINDOW, 

これはWndProcメソッドである間:それはあなたのメインラインコードにありますようにhWndMainへ

+0

"うまくいかない"とは何ですか? 'GetCLientRect'関数を呼び出した後の' MaxSize'の値は何ですか? –

答えて

4

この割り当ては見え

//Window Procedure 
WM_CREATE: 
{ 
    ... 
    GetClientRect(hWndMain,&MaxSize); 

しかし、WM_CREATEメッセージが内に受信し、を処理され、 CreateWindowを呼び出すので、まだ返されていないので、hWndMainへの代入はまだ行われていません。したがって、GetClientRect()を無効またはNULLのhWndMainで呼び出す可能性が高いため、無視しているエラーを返す可能性があります。代わりに、WndProcに渡されるhwndパラメーターを使用します。

+0

BredanMcKありがとうございました...あなたの答えは...私はGetClientRect(hWndMain、&Size)をGetClientRect(hWnd、&Size)に置き換えました。プログラムは現在正常に動作しています...もう一度ありがとう... –