我有一个简单的无模式对话框,我想放在父窗口的右下角。这是我第一次在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);
我错过了一个功能还是我必须自己计算偏移?
我不想使用资源中定义的坐标,我想以编程方式解决它。
答案 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)