【问题标题】:Set the size of a window in MFC application在 MFC 应用程序中设置窗口的大小
【发布时间】:2012-01-26 08:06:33
【问题描述】:

对于许多用户来说,这个问题可能被认为是幼稚的,但我是 MFC 的新手,我需要一个指示。我想为 SDI 窗口设置一个特定的大小,但我没有这样做。我尝试了 CMainFrame 类中的代码:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
    return FALSE;

 cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

 cs.cy = 600; 
 cs.cx = 600; 
 cs.y = ((cs.cy * 3) - cs.cy) / 2; 
 cs.x = ((cs.cx * 3) - cs.cx) / 2;


 return CFrameWnd::PreCreateWindow(cs); 
}

窗口仍然保持其大小,但没有任何变化。

就我而言,我可以覆盖 CWnd 类中的相应函数以获得相同的结果。鉴于我到目前为止还没有在我的程序中使用过 CWnd 类,我该怎么做呢?

【问题讨论】:

标签: c++ mfc window


【解决方案1】:

将你的代码移到CFrameWndEx::PreCreateWindow的调用之上

【讨论】:

  • 当我删除这些行时 if( !CFrameWndEx::PreCreateWindow(cs) ) 返回 FALSE;。程序崩溃。如果我把附加代码放在上面,什么都不会再改变。问题是该函数在任何情况下都返回 FALSE。我如何克服这个问题?
  • 只是为了检查:运行你的应用程序(上面的更改),移动和调整主应用程序的窗口,然后关闭应用程序。然后再次启动应用程序。应用程序的窗口是否在以前的位置?
【解决方案2】:

你的类真的是从 CFrameWndEx 派生的吗?那是您在 IMPLEMENT_DYNANIC / IMPLEMENT_DYNCREATE 行中的课程吗?在 BEGIN_MESSSAGE_MAP 行中?

还可以考虑将ON_WM_CREATE 添加到您的消息映射及其OnCreate 方法以允许其他可能性:

  • 在这个新方法中做与你正在做的事情类似的事情。

  • 在此处使用SetWindowPos

【讨论】:

    猜你喜欢
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多