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的大小来设置合适的滚动条长度,当然也可以自己给定值,但是如果太小,那么就可能不会出现滚动条;如果太大,那么在视图外的部分将会显示
}