mfc向导生成的 默认窗口大小和位置是如何设置的
来源:互联网 发布:品茗软件电话 编辑:程序博客网 时间:2024/05/02 01:48
窗口最终是由Windows API 函数::CreateWindowEx创建,::CreateWindowEx需要窗口的信息,其中就有位置和大小,这些信息从哪里来?下面就分析一下: BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) cs.cx=500; cs.x=0; return TRUE; 还有很多的办法改变窗口运行的大小:?(需要更新) 方法一: 在单文档CDonghuaApp::InitInstance()中修改 BOOL CDonghuaApp::InitInstance() 。。。。。。 // The one and only window has been initialized, so show and update it. return TRUE; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) this->MoveWindow(rect.left+100,rect.top+100,rect.Width()/2,rect.Height()/2,TRUE); 或者在App类的InitInstance函数中改变显示主框架的m_nCmdShow参数如下: m_nCmdShow = SW_SHOWMAXIMIZED;
下面是CFrameWnd中Create函数的声明
BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName,
DWORD dwStyle = WS_OVERLAPPEDWINDOW,
const RECT& rect = rectDefault,
CWnd* pParentWnd = NULL, // != NULL for popups
LPCTSTR lpszMenuName = NULL,
DWORD dwExStyle = 0,
CCreateContext* pContext = NULL);
从onst RECT& rect = rectDefault,这就是窗口位置和大小参数 它有一个默认值,是Windows定义好的。
我以创建的当文档应用程序Single为例说明 CFrame的Create函数的调用中间无关的函数都删掉了
CSingleApp::InitInstance() ->CWinApp::ProcessShellCommand ->CDocTemplate::CreateNewFrame ->CFrameWnd::LoadFrame ->CFrameWnd::Create ->CWnd::CreateEx ->::CreateWindowEx
这一串函数在调用CFrameWnd::Create是得到了窗口的位置和大小
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cy=500;//修改默认矩形窗口rect的尺寸大小
cs.y=0;//修改默认窗口的位置
}
{
AfxEnableControlContainer();
HWND hWnd=GetDesktopWindow();//取得桌面窗口的句柄
GetWindowRect(hWnd,&rect);//设置矩形对象参数
m_pMainWnd->MoveWindow(rect.left,rect.top,rect.Width()/2,rect.Height()/2,TRUE);//设置框架窗口的显示位置和大小
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
}
方法二:在 CMainFrame::OnCreate()中修改
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
CWnd *pWnd=GetDesktopWindow();//返回一个桌面窗口指针
pWnd->GetWindowRect(&rect);//窗口指针指向矩形对象
// this->MoveWindow(rect.left,rect.top,rect.Width()/2,rect.Height()/2,TRUE);
// this->MoveWindow(0,0,600,600,TRUE);//设置窗口的位置和大小
return 0;
}
以一个sdi的工程举一个例子:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar/n");
return -1; // fail to create
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar/n");
return -1; // fail to create
}
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
::ShowWindow(this->m_hWnd,SW_SHOWMAXIMIZED);//代码在这里
return 0;
}
对于MDI的窗口只要分别在主窗口的OnCreate函数和子窗口的PreCreateWindow函数中添加代码就可以
pMainFrame->ShowWindow(m_nCmdShow);
- mfc向导生成的 默认窗口大小和位置是如何设置的
- MFC 设置窗口的大小与位置
- MFC窗口位置和大小的获取
- 如何设置一个窗口的大小、位置和其他参数
- 如何设置应用程序窗口的初始大小和位置
- Ubuntu设置终端的默认窗口大小和位置坐标【OK】
- 如何设置Ubuntu下终端窗口的默认大小
- MFC 更改默认窗口大小的方法
- 如何设置MFC单文档主窗口的位置?
- 在MFC中如何设置窗口的初始大小?
- 修改MFC AppWizard向导生成的框架程序的外观和大小
- 设置窗口的客户区大小和位置
- unity里设置窗口大小和位置的代码
- MFC 设置弹出对话框的位置、大小和风格 SetWindowPos
- MFC怎么设置控件的位置和大小
- MFC中设置窗口大小位置
- MFC中设置窗口大小位置
- MFC窗口大小及位置设置方式
- ruby
- VB程序设计实验作业(1)
- 设计模式-----组合模式
- 建设银行账户管理费
- 彼得定律与员工职业生涯规划(该提拔谁,职业规划,知人善用)
- mfc向导生成的 默认窗口大小和位置是如何设置的
- 我常去的编程技术网站
- 首次写博客
- uCOS-II for lpc2200 移植心得
- size_t(-1) / sizeof(_Tp)到底是何意义?
- strcpy 的实现
- Android 桌面组件【widget】初探
- ruby2
- Traits技术初探