我有什麼應該是一個非常簡單的目標,但它似乎棘手。我必須得到一些精確大小的屏幕圖像文件,所以我認爲這是有道理的,添加一個控件來調整我的應用程序的窗口的大小,我想要的確切尺寸。Windows API SetWindowSize()似乎沒有效果
我正在使用VS2010。
下面是從我的嚮導生成對話框中的相關代碼:
DlgSetWindowSize::DlgSetWindowSize(CWnd* pParent /*=NULL*/)
: CDialogEx(DlgSetWindowSize::IDD, pParent)
{
m_width = 0;
m_height = 0;
m_parent = pParent;
}
void DlgSetWindowSize::OnBnClickedOk()
{
CDialogEx::OnOK();
SetWindowPos(m_parent, 0, 0, m_width, m_height, SWP_NOMOVE|SWP_NOZORDER|SWP_NOOWNERZORDER);
}
,這裏是對它的調用:
void CMyAppView::OnWindowSize()
{
DlgSetWindowSize d(this);
if (IDOK == d.DoModal())
{
Invalidate();
}
}
SetWindowPos
返回一個非零值,表明成功根據文檔(click here)。當然,在運行對話框時,我輸入我想要的寬度和高度的像素值。調試器驗證預期值是傳遞給SetWindowPos
,還有SetWindowPos
給出非零返回。位於SetWindowPos
的最後一個參數中的位開關被設置爲忽略位置參數,並且只在該調用中表示size
參數,以便窗口的大小可以根據需要調整,而不必改變位置。
一切似乎都是按順序的,但窗口大小不變。我已經將這個邏輯應用到了我的應用程序的文檔窗口中,並且當它不起作用時,我也將它應用於應用程序的MainFrame窗口。零動作。
我在這裏錯過了什麼,或者是否有一些完全不同的方法我應該使用?
是的,我應該提到MFC和窗戶是我的文檔的查看窗口。你在所有方面都是正確的。當您應用於CMainFrame窗口時,您所陳述的解決方案都可以正常工作。 – vacuumhead
奇怪的是,當我將您的解決方案應用於文檔的「視圖」窗口時,滾動條以新大小重新繪製,但視圖的可視邊框仍然擴展到MainFrame視圖的邊緣。 – vacuumhead
@vacuumhead - 當時在您的主機中最大化了View嗎?或者它是一個單文檔(SDI)界面,它是唯一的選擇? –