孙鑫C++第九堂课要点

1、修改窗口的属性和尺寸在CMainFrame类中的PreCreateWindow函数中进行,在显示窗口之前操作

2、如果要将显示窗口的标题改掉,需要下面操作

 1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
 2 {
 3     if( !CFrameWnd::PreCreateWindow(cs) )
 4         return FALSE;
 5     // TODO: 在此处通过修改
 6     //  CREATESTRUCT cs 来修改窗口类或样式
 7     cs.style&=~FWS_ADDTOTITLE; //FWS_ADDTOTITLE是窗口设置的默认形式,视图告诉框架以视类的文件名来显示窗口,如果需要重新写,那么要将其去掉
 8     cs.lpszName="浙江大学";
 9     return TRUE;
10 }

前后的形式对比:

                                

3、在窗口创建后,可在CMainFrame类中OnCreate函数中进行修改,Window函数中SetWindowLong改变指定窗口的属性,GetWindowLong获取指定窗口的信息;

1     SetWindowLong(m_hWnd,GWL_STYLE,WS_OVERLAPPEDWINDOW); //创建窗口后,再改变窗口的样式
2     SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);//去掉最大化操作

4、直接用函数AfxRegisterWndClass注册窗口类,在CMainFrame和CView中的PreCreateWindow函数中写程序,可以修改窗口样式、光标、图标、背景等。

    //CS_HREDRAW表示窗口的宽度发生改变引起重绘,CS_VREDRAW表示窗口的高度发生改变引起重绘,
    cs.lpszClass=AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,0,0,LoadIcon(NULL,IDI_WARNING));

5、在已创建的窗口中,修改其光标和图标,用SetClassLong

6、工程目录的res文件夹主要来放置工程的资源文件;一个类文件中要调用另外一个类文件中已经定义的全局变量,当然这两个均不是继承与派生关系,需要在该类文件中加extern,例如 extern CTestApp theApp

7、实现图标不断的运动

  首先将3个图标资源文件导入,然后在CMainFrame类创建HICON类型的m_hIcons[3]的数组,在OnCreate函数中,调入

 1 extern Cmfctest16App theApp;
 2 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
 3 {
 4     if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
 5         return -1;
 6 
 7     if (!m_wndStatusBar.Create(this))
 8     {
 9         TRACE0("未能创建状态栏\n");
10         return -1;      // 未能创建
11     }
12     m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT));
13 
14     m_hIcons[0]=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));//AfxGetInstanceHandle获取当前应用程序(注意而不是当前窗口)的实例句柄,MAKEINTRESOURCE定义的宏,将资源视图的ID转化为字符串
15     m_hIcons[1]=LoadIcon(theApp.m_hInstance,MAKEINTRESOURCE(IDI_ICON2));   //extern Cmfctest16App theApp;
16     m_hIcons[2]=LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_ICON3)); //AfxGetApp()返回应用程序CWinApp对象(theApp)的指针
17     return 0;
18 }

 8、定时器的设置:(前面设有SetTimer()函数)

1 // CMainFrame 消息处理程序
2 void CMainFrame::OnTimer(UINT_PTR nIDEvent)
3 {
4     // TODO: 在此添加消息处理程序代码和/或调用默认值
5     static int index=1;    //注意这里的静态变量
6     SetClassLong(m_hWnd,GCL_HICON,(LONG)m_hIcons[index]);
7     index=++index%3;       //index始终在0~2之间循环
8     CFrameWnd::OnTimer(nIDEvent);
9 }

9、工具栏的设置、加入分隔符、删除等操作

  要使用VC6.0传统的工具栏,要在创建工程向导中,“用户界面功能”中选择“使用经典菜单”下“使用传统的停靠工具栏”;在资源视图Toolbar下的IDR_MAINFRAME中修改工具栏,其中删除某个图标,不要用delete,要将该图标拖到工具栏其他的地方,则图标自动消失。

10、工具栏的显示与隐藏(两种方法)

 1 // CMainFrame 消息处理程序
 2 void CMainFrame::OnNewTool()
 3 {
 4     //第1种方法
 5     if (m_toolbar.IsVisible()) //m_toolbar为声明的CToolBar的对象,IsVisible表示该控件是否显示(bool型函数) 
 6     {
 7         m_toolbar.ShowWindow(SW_HIDE);
 8     } 
 9     else
10     {
11         m_toolbar.ShowWindow(SW_SHOW);
12     }
13 
14     //第2种方法
15     ShowControlBar(&m_toolbar,!m_toolbar.IsWindowVisible(),FALSE);
16 }

11、RecalcLayout()当工具条开启或者关闭,框架窗口发生改变时

12、在子菜单项中添加复选标记

1 void CMainFrame::OnUpdateNewTool(CCmdUI *pCmdUI)
2 {
3     // TODO: 在此添加命令更新用户界面处理程序代码
4     pCmdUI->SetCheck(m_toolbar.IsWindowVisible());
5 }

 

posted @ 2014-10-07 17:01  龙泽一狼  阅读(128)  评论(0编辑  收藏  举报