我在Visual Studio 2008 C++中工作。我有一個MFC對話框,裏面有一個控件。我正試圖在控件中放置另一個對話框。GetWindowRect座標不是屏幕相對的
SetWindowPos()在第二個對話框上清楚地使用了屏幕座標,所以我需要獲取控件的屏幕座標或父對話框。 MSDN文檔說GetWindowRect()提供了「屏幕座標相對於顯示屏幕的左上角」,但這不是我所得到的。在控件上,它給出了相對於父項的座標。在父項上,它給出了left = 0和top = 0。我也嘗試了GetWindowPlacement()中的矩形,它給出了同樣的事情。一切都與父母有關。
爲什麼GetWindowRect()不返回屏幕相對座標?有沒有另一種方法來獲得他們?我不是新的編程,但對於Windows編程,Visual Studio和MFC來說是相當新穎的,所以我可能會錯過某些明顯的東西。
這是我在OnInitDialog正在做父對話框:
// TestApp message handlers
BOOL TestApp::OnInitDialog()
{
CDialog::OnInitDialog();
FILE * pFile = fopen("out.txt","w");
CRect winRect;
GetWindowRect(&winRect);
fprintf(pFile,"left=%li top=%li right=%li bottom=%li\n",winRect.left,winRect.top,winRect.right,winRect.bottom); fflush(pFile);
fclose(pFile);
return TRUE; // return TRUE unless you set the focus to a control
}
運行時,對話框不會在屏幕的左上角出現,但out.txt包含:
left=0 top=0 right=297 bottom=400
從來沒有! GetWindowRect永遠不會返回任何相對座標。你總是得到屏幕座標。告訴我們你的代碼來澄清這一點! – xMRi 2014-10-06 16:20:17
而不是描述,顯示你的代碼。海報宣稱他們在做「這個和那個」的次數太多了,結果他們沒有做他們自稱的東西。 – PaulMcKenzie 2014-10-06 16:21:09
如果您不熟悉Windows編程,請不要使用需要熟悉Windows API的框架(如MFC)。相反,首先要了解Windows API。這既容易學習和理解,也容易直接影響。 [學習使用C++編程Windows](http://msdn.microsoft.com/en-us/library/windows/desktop/ff381399.aspx)是一個很好的起點。 – IInspectable 2014-10-06 16:24:03