以前由于对指针一知半懂,对C++畏如狼虎。用C#做了个小项目,老大认为效率不大好。无奈只好用VC改写,学了一周,发现VC还是不难的。
框架都帮你搭好了,只要添加控件及事件即可。复杂的C++知识,如多态,运算符重载,虚函数,模板等很少用到。至于所谓的消息循环,映射,也不难懂。
把学习的一些东西记录下(我用的VC6.0):
1.VC新建的工程一般是MFC Appwizard(exe)。
2.工具栏的Find in files 这个功能经常用。相当于在整个项目中查找变量或方法等。
3.常量声明一般用const代替宏。(Effective C++也是如此说的)
4.析构函数可用来释放资源。
5.控件的ID属性唯一,不能相同。
6.一般要为控件添加相应的变量(Ctrl+W),比如一个文本框,你要放字符串,就添加一个字符串变量给他,要存放int变量,就添加一个int变量给他。
7.右击对话框,属性里的Style-System Menu设置是否要右上角的关闭等功能,还可设置是否需要最大最小化。
8.消息对话框:MessageBox("Hello”);或者AfxMessageBox("Hello”);区别不大。
9.MFC就是封装了Windows API的函数库。
10.绘图一般在onDraw或onPaint方法中。
11.定时器经常用:SetTimer(1,1000,NULL);ID为1,1000毫秒。关闭ID为1的定时器:KillTimer(1);
12. 字符串,数字转换:str.Format("%02X",12); 将十进制转为2位的十六进制(10->0A)。int i = atoi("11");字符串转为整数
13. Radio Button的分组,第一个设置组 属性为true(勾上),其余几个的tabIndex与之相邻。再为第一个设置变量,为0表示第一个选中,为1表示第二个选中。。。
14. 控件工具栏显示隐藏: 工具栏菜单栏空白右击。
15.UpdateData(true、false),设置刷新控件状态或变量的值。Radio Button,CheckBox的事件一般要设置:UpdateData(true).
16.类中定义了构造函数一定要实现(犯了这个错误,FT)。
17.#pragma comment( lib,"visa32.lib" );链接库加入。
18.获取当前路径的方法:
CString C***Dlg::GetAppPath(){//获得当前路径
CString strPath;CHAR szPath [MAX_PATH + 1];
if (GetModuleFileName (NULL, szPath, MAX_PATH ) )
{ strPath = szPath;
int nPos = strPath.ReverseFind ( '\\' );
if ( nPos >= 0 ) strPath = strPath.Left ( nPos + 1 ); }
return strPath;
}
19.调试用的assert和Trace:(打开Trace:TOOLS->MFC TRACER- “ENABLE TRACING”.)
ASSERT(i<12); #include "assert.h"
TRACE("test:%02X\n",i);
// AfxTraceEnabled = false;
控制台程序用printf,,cout输出调试,MFC可用Trace在控制台输出(只可用在Debug版本)。
20.要掌握常用函数:sprintf,atoi,atof,itoa,memset,strcpy的使用。
21. 改变字体大小:窗口属性-font
//设置窗口的大小和位置
SetWindowPos(NULL, 0, 0, 320, 200, SWP_NOZORDER);
//设置窗口的大小和位置
MoveWindow(0, 200, 200, 320);
22.显示图片:
HICON icon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_1.SetIcon(icon);
HBITMAP= ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_2.SetBitmap(b);
天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。”