窗口初始化

主窗口的初始最大化,只需

在CXXApp::InitInstance()中   
将m_pMainWnd->ShowWindow(SW_SHOW);   
改为m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);   

 

 

 

而子窗口的初始最大化,可以这样来,

改写CChildFrame的虚函数ActivateFrame:   
void   CChildFrame::ActivateFrame(int   nCmdShow)     
{   
static   BOOL   bFirstRun   =   TRUE;   
if(bFirstRun)   
  {   
  nCmdShow   =   SW_SHOWMAXIMIZED;   
  bFirstRun   =   FALSE;   
  }   
  CMDIChildWnd::ActivateFrame(nCmdShow);   
}

 

 

 

如果想改变应用程序窗口样式,则需要直接编辑CMainFrame::PreCreateWindow()函数。直接编辑还允许为应用程序的初始外观作某些额外的变化。

 

编辑CMainFrame::PreCreateWindow()

 

1)使应用程序位于屏幕中央,并只占据屏幕的90%,可以使用下面的代码:

BOOLCMainFrame::PreCreateWindow(CREATESTRUCT&cs)

{

//centerwindowat90%offullscreen

intxSize=::GetSystemMetrics(SM_CXSCREEN);

intySize=::GetSystemMetrics(SM_CYSCREEN);

cs.cx=xSize*9/10;

cs.cy=ySize*9/10;

cs.x=(xSize-cs.cx)/2;

cs.y=(ySize-cs.cy)/2;

returnCMDIFrameWnd::PreCreateWindow(cs);

}

 

2)如果还想从应用程序的标题栏中删除文档标题,则把下面的代码添加到PreCreateWindow()中。

cs.style&=~FWS_ADDTOTITLE;

 

3)如果还想从应用程序标题栏中去掉最小化和最大化按钮,则添加:

cs.style&=~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX);

 

4)如果想使应用程序的大小固定,以致拖动窗口的右下角时没有反映,那么添加:

cs.style&=~WS_THICKFRAME;

 

5)如果想应用程序在开始执行时被最大化,那么找到应用程序类中的ShowWindow(),并

改变它,令它使用SW_SHOWMAXIMIZED标志而不用m_nCmdShow。

pMainFrame->ShowWindow(SW_SHOWMAXIMIZED);//orSW_SHOWMINIMIZED

pMainFrame->UpdateWindow();

 

 

 

目标

保存应用程序屏幕的大小、位置和状态,包括每个工具栏或对话条的位置和大小,以便应用程序在下一次运行]时能恢复它们。

 

策略

当应用程序关闭时,不仅保存主窗口的大小和位置,而且还把工具栏和状态栏的状态保存到系统的一个注册区。因此,当应用程序被再次打开时,我们将检索这些消息,并恢复窗口和工具栏等等。

 

步骤

1.保存设置值

1)在系统注册区中定义一个位置,在该位置用一个全局包含文件保存这些信息。

 

“Company”是“公司”名。

#defineCOMPANY_KEY "Company"

#defineSETTINGS_KEY "Settings"

#defineWINDOWPLACEMENT_KEY "WindowPlacement"

 

2)在应用程序类的InitInstance()成员函数中,把COMPANY_KEY添加到SetRegistryKey()中。

SetRegistryKey(COMPANY_KEY);

 

注意:这个函数必须放到  LoadStdProfileSettings();  // Load standard INI file options (including MRU) 这条语句前面。我在调试的时候经常出错主要就是这个函数位置问题。

 

3)用ClassWizard把一个WM_CLOSE消息处理函数添加到CMainFrame类中,用SaveBarState()可以保存条的位置和大小。用GetWindowPlacement()可以得到应用程序的当前大小和位置,用WriteProfileBinary()把它的结果保存到系统注册区。

voidCMainFrame::OnClose()

{

//savestateofcontrolbars

SaveBarState("ControlBarStates");

//savesizeofscreen

WINDOWPLACEMENTwp;

GetWindowPlacement(&wp);

AfxGetApp()->WriteProfileBinary(SETTINGS_KEY,

WINDOWPLACEMENT_KEY,(BYTE*)&wp,

sizeof(WINDOWPLACEMENT));

CMDIFrameWnd::OnClose();

}

 

2.恢复设置值

 

1)再次执行应用程序后,恢复工具栏到它们的初始状态,把下面的代码添加到CMainFrame类的OnCreate()成员函数的开始位置。

LoadBarState("ControlBarStates");

 

2)要从系统注册表中恢复应用程序的主窗口,在应用程序类中找到ShowWindow()函数,并用下面的代码替换它。注意,现在我们用SetWindowPlacement()恢复主窗口到它的初始大小和位置。

 

BYTE *p;

UINT size;

if(GetProfileBinary(SETTINGS_KEY,WINDOWPLACEMENT_KEY,&p,&size))

{

m_pMainWnd->SetWindowPlacement((WINDOWPLACEMENT*)p);

delete[]p;

}

else

{

m_pMainWnd->ShowWindow(m_nCmdShow);

}

 

m_pMainWnd->UpdateWindow();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在学习51单片机时,了解如何进行端口初始化是非常重要的。根据引用\[3\]中提到的文章,可以通过外部RST引脚复位和掉电/上电复位来进行端口初始化。具体步骤如下: 1. 外部RST引脚复位:通过将RST引脚接地一段时间,然后释放,可以实现复位操作。在复位后,单片机的所有寄存器和端口都会被初始化为默认值。 2. 掉电/上电复位:通过控制电源的开关,可以实现复位操作。当单片机上电时,会进行复位操作,将所有寄存器和端口初始化为默认值。 在进行端口初始化之前,需要先了解单片机的端口结构和寄存器的使用方法。可以参考引用\[2\]中提到的文章,了解单片机的基础知识和寄存器的功能。 总结起来,进行51单片机端口初始化的方法有外部RST引脚复位和掉电/上电复位。在进行端口初始化之前,需要了解单片机的端口结构和寄存器的使用方法。这样可以确保单片机在初始化后能够正常工作。 #### 引用[.reference_title] - *1* *2* *3* [【单片机基础】初始51单片机](https://blog.csdn.net/lzxiaotu/article/details/128142198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值