相对于父级放置窗口

时间:2012-02-02 09:18:56

标签: c windows winapi

我有一个简单的无模式对话框,我想放在父窗口的右下角。这是我第一次在C中使用Windows窗体(如果我不直接了解,请耐心等待。)

我尝试使用SetWindowPos来定位窗口,但无效,因为坐标x和y相对于左上角的屏幕。

//hWnd is the parent window
hwndStatusBox = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STATUSBOX), 
                             hWnd, svnStatusBoxProc); 

SetWindowPos(hwndStatusBox,NULL, 100, 100, 0, 0, 
             SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOZORDER);

我错过了一个功能还是我必须自己计算偏移?

我不想使用资源中定义的坐标,我想以编程方式解决它。

2 个答案:

答案 0 :(得分:3)

对于顶级窗口,即不是窗口,坐标确实相对于屏幕。

您需要阅读拥有窗口的坐标,计算出您需要的偏移量,添加偏移量,最后设置对话框的坐标,相对于屏幕原点。或者您可以致电ClientToScreen,传递hWnd,然后让系统为您完成。

答案 1 :(得分:3)

有一个功能可以做到这一点:

ClientToScreen

将客户端坐标转换为屏幕坐标。例如: -

message_box_position = {ParentWidth - MessageBoxWidth, ParentHeight - MessageBoxHeight}
ClientToScreen (parent_window_handle, &message_box_position)
SetWindowPos (message_box_handle, messahe_box_position)