VC2008学习笔记

VC2008学习笔记

1.Unicode文件的开头两个字节固定为0xffef或者0xefff;

2.memcpy函数的第三个参数为字节数,而非字符数,Unicode环境下尤其要注意;

3.GetBufferSetLength的参数为字符数,而非字节数,同样Unicode环境下要注意;

4.vc2008查看内存的方法:vc2008 IDE->调试->窗口->内存,可选4个内存窗口进行查看内存值;

5._countof函数的参数不能为指针类型,否则会出错;

6.用VC2008进行调试时断点处不停,而且红色实心圆圈断点变为一个空心黄色圆圈断点时,可进行如下设置:VC2008 IDE->工具->选项->调试->常规->将“要求源文件与原始版本完全匹配”的复选框中的对勾去掉即可;

7.为MDI窗口添加水平与垂直滚动条

     在CMainFrame中的OnCreate方法下加一句代码,如下:

     lpCreateStruct->style |= WS_VSCROLL | WS_HSCROLL; // 增加垂直和水平滚动条

8.为MDI子窗口(选项卡式和无选项卡式) 添加水平与垂直滚动条

   方法一:在CChildFrame中的PreCreateWindow方法下加一句代码,如下:

            cs.style |= WS_VSCROLL | WS_HSCROLL;

  方法二:在CXXXView::PreCreateWindow方法下加一句代码,如下:

   cs.style |= WS_HSCROLL | WS_VSCROLL;

9. 添加树的双击事件

    为CViewTree类添加”=NM_DBLCLK”消息, 然后在OnNMDblclk方法中实现业务即可;

10. 添加系统热键的方法

    先注册热键: RegisterHotKey(this->m_hWnd,1001,MOD_CONTROL,'F');

    添加消息:WM_HOTKEY, 然后会自动生成OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)方法, 实现该方法;

    当不需要该热键时:UnregisterHotKey(m_hWnd, 1001);

11.添加菜单快捷键(加速键)的方法及添加事件处理程序的位置

   先在menu下的某一个菜单里添加一个菜单项,例如:测试(&T)/tCtrl+T,ID为"ID_TEST"

   然后在Accelerator中添加一个快捷组合键"Ctrl+T",ID要和上面一样,都为"ID_TEST"

   最后为该ID_TEST添加事件处理程序即可, 对于多文档工程来说,要注意添加事件处理程序的位置对程序也有影响,下面分别来介绍:

  ①将菜单ID的事件处理程序添加到CMainFrame中,那么只有在关掉所有子窗口后,即只有父窗口打开时,操作该菜单时该事件处理程序有效;

  ②将菜单ID的事件处理程序添加到CChildFrame中,那么只要存在子窗口被打开了,操作该菜单时该事件处理程序就有效;

  ③ 将菜单ID的事件处理程序添加到CXXXXApp中,那么该事件处理程序对CMainFrame和CChildFrame都有效;

  ④菜单ID添加在CXXXXDoc和CXXXXView中时该事件处理程序无效.

12.在VC2008 IDE中建立的有默认系统菜单的工程里,按下Ctrl+S会出现保存对话框或者直接保存(不进行提示),如果希望改变这种处理方式,有两种方法:

方法一:可以在CXXXXDoc中重载CDocument中的DoFileSave()函数;

方法二:在Frame(CChildFrame/CMainFrame)中重载OnCommand()方法,通过wPara参数值来判断选择的是否为保存ID,然后实现即可.

13. 当CXXXXView继承CView时添加的滚动条无效,这时我们可以继承CScrollView,然后在CXXXXView中重载OnInitialUpdate()方法,代码如下:

 void CXXXXView::OnInitialUpdate()

{

              CScrollView::OnInitialUpdate();

                

              CSize sizeTotal;

              // TODO: 计算此视图的合计大小

              //sizeTotal.cx = sizeTotal.cy = 1024;

    OnDraw(this->GetDC());    // 之所以在这里调用OnDraw(),是因为这个函数里计算了CXXXXDoc的大小CSize;虽然OnDraw()方法会自动调用,但却在本函数OnInitialUpdate()之后执行

              sizeTotal=GetDocument()->GetDocSize(); // 这里获得CXXXXDoc的大小

    SetScrollSizes(MM_TEXT, sizeTotal);    // 根据CXXXXDoc的大小来设置合适的滚动条长度,当然也可以自己给定值,但是如果太小,那么就可能不会出现滚动条;如果太大,那么在视图外的部分将会显示

}

你可能感兴趣的:(VC2008学习笔记)