我已经尝试过了
MoveWindow(50,50,150,200,TRUE)
CMyFormView::OnInitialUpdate();
另外,我在
中尝试了以下代码CWinApp::InitInstance();
RECT desktop;
const HWND hDesktop = ::GetDesktopWindow();
::GetWindowRect(hDesktop,&desktop);
MoveWindow(hDesktop,0,0,900,400,TRUE);
我没有运气调整表格(对话框) 我将不胜感激任何建议。
答案 0 :(得分:3)
在SDI程序中,对话框由大型机窗口调整大小以填充客户区。调整框架窗口的大小,然后会出现对话框。把它放在formview的OnInitialUpdate
中AfxGetMainWnd()->MoveWindow(....);
答案 1 :(得分:1)
关键事项:
MINIMUM SIZE - 您设置 - 对话框模板 - 或表单视图 - 您使IS成为CFormview将使用的绝对最小尺寸
MAXIMUM SIZE - 自动调整大小 - 对话框模板没有最大值。 CFormview动态地将其拉伸以适合CMainFrame窗口。
启动应用程序到模板大小 当然,您可能希望CMainFrame窗口尽可能紧凑,这可以通过CFormView :: OnInitialUpdate()中的3个强制代码行来实现
void CSimpleSDIView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit(); // FORCES CMainframe to be as small as the dialog template
}
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
lpMMI->ptMinTrackSize.x = 500; // absolute minimum width for CMainFrame
lpMMI->ptMinTrackSize.y = 500; // absolute minimum height for CMainFrame
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
设置为IDEAL SIZE 这可以通过使用以下代码在CFormView :: OnInitialUpdate中实现(仍然需要步骤3):
AfxGetMainWnd()->MoveWindow(0, 0, 1024, 600, 1);
TWEAK控制位置随着MFC中功能区的出现,一切看起来不错,但如果没有额外的调整,使用步骤1 - 5是行不通的。基本上,功能区会向主窗口发送额外的调整大小,因此即使您发送了最小的模板大小,由于额外的大小调整,事情会有一些不成比例 - 主要是因为功能区内的组可能会崩溃成一个图标。 **在执行第5步之前**您可能需要添加以下代码:
if(::GetSystemMetrics(SM_CXSCREEN) > 1024)
{
RECT r;
CWnd *someControl = GetDlgItem(IDC_SOMECONTROL);
someControl->GetWindowRect(&r);
ScreenToClient(&r);
r.right += 300;//r.right += 30;
r.bottom += 150;
someControl->MoveWindow(&r)
}
<强>说明强>
简短的回答,你没有!基本上,我遇到了同样的问题,制作了一个用于CFormView派生类的对话框模板。当我想像任何普通窗口一样拉伸CMainFrame窗口时,我希望formview的内容相应地调整大小。一些代码工作得很好,但是当我把窗口做得很小时问题出现了。当我这样做时,我会得到这些丑陋的滚动条。我的想法是滚动条在那里,因为他们试图尊重原始的对话框模板大小。那个想法是对的!例如,您将对话框设置为500 x 500并且调整大小小于此值,您将获得滚动条 - 因为CFormview认为应用程序必须在最小500x500。最小大小由您制作的模板控制,您无法动态缩小。
答案 2 :(得分:0)
通常,子窗口的大小,位置在子的初始化代码中更改。
如果在父窗口代码中更改此项,则始终必须检查子窗口句柄值是否有效。
我输入WM_CREATE
的代码CAboutDlg
处理程序。
int CAboutDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialogEx::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
RECT desktop;
const HWND hDesktop = ::GetDesktopWindow();
::GetWindowRect(hDesktop,&desktop);
MoveWindow(&desktop,TRUE);
return 0;
}