【发布时间】:2010-09-15 18:04:30
【问题描述】:
我有一个 MFC 应用程序,我已经工作了几个星期了,我想在加载主框架时手动设置它的尺寸,有人可以帮我解决这个问题,特别是在哪里放置代码也是?
谢谢!
【问题讨论】:
我有一个 MFC 应用程序,我已经工作了几个星期了,我想在加载主框架时手动设置它的尺寸,有人可以帮我解决这个问题,特别是在哪里放置代码也是?
谢谢!
【问题讨论】:
您还可以从CMainFrame::OnCreate() 或CWinApp 派生类'InitInstance 中设置大小(使用SetWindowPos())。查找显示pMainFrame->ShowWindow() 的行,并在该行之前调用pMainFrame->SetWindowPos()。这就是我一直这样做的地方。
【讨论】:
使用 .. 查找您的屏幕尺寸
CRect rect;
SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
screen_x_size=rect.Width();
screen_y_size=rect.Height();
然后使用这些值来计算窗口的 X 和 Y 大小..
::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,main_x_size,main_y_size,SWP_NOZORDER);
main_x_size 和 main_y_size 是您的尺寸。
【讨论】:
我认为您正在寻找 PreCreateWindow 并且您的应用不是基于对话框的。
它是 CWnd 类的一个虚成员函数,它在创建窗口之前被框架调用。所以这是放置更改的正确位置。
你应该这样写:
BOOL CMyWindow::PreCreateWindow(CREATESTRUCT& cs)
{
cs.cy = 640; // width
cs.cx = 480; // height
cs.y = 0; // top position
cs.x = 0; // left position
// don't forget to call base class version, suppose you derived you window from CWnd
return CWnd::PreCreateWindow(cs);
}
【讨论】:
MainFrm.cpp 中编辑 PreCreateWindow,而不是你的 View 类。
你可以用这个:
CRect rect;
SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0);
left = -3, right = 3;
rect.top = 100;
rect.bottom = 500;
rect.left = 100;
rect.right = 800;
//or use
CRect cr;
cr.SetRect(POINT{ 100,100 }, POINT{ 500,800 });
MoveWindow(rect);
【讨论】: