Visual Studio 2005的MFC使用入门的一些技巧

来源:互联网 发布:钢铁力量巨蛇数据 编辑:程序博客网 时间:2024/05/16 09:21

   下面的一些是我使用VS2005进行MFC开发时候遇到的一些问题,很多叫你如何MFC入门的书籍都是面向让你在VC6.0的平台的,当你需要使用更高版本的时候势必会遇到很多类似的问题,这些我也是作为一个初学者来稍微谈一谈而已。

一、为对话框添加主菜单

 

1.ctrl+r添加menu资源,自动创建一个IDIDR_MENU1的菜单

2.添加菜单项,并添加相应的子菜单

3.在子菜单上添加响应的消息响应函数

4.设置对话框的menu属性为资源中的菜单IDR_MENU1

二、VS2005集成开发环境不再使用VC6那样的类向导和消息映射对话框,直接在属性窗口的消息、事件栏中选择相应的消息就可以直接添加相关的响应函数。

 

 

三、在类视图中选择要添加消息相应函数的类,右击->属性,消息选项卡选择要添加的函数。

 

 

四、在VC6里面,是可以把一个EDIT关联到一个CString上去的。然后用UPDATA,很好用。

但在VS2005,似乎只能给EDIT关联一个CEDIT变量,而无法添加CString的了。

 

实际上需要先使你add 的Variable的变量的属性Control修改为Value,手工把CEdit修改为 CString(这个是一个下拉菜单)  

五、当遇到什么assert error的时候可以调试看看具体是什么断言除了问题,如果是有条件的比如忘了判断是否有效的值,这个时候增加一个条件判断试试。

 

六、0x80000003   错误的意思是 :一个或数个参数无效。另外当你的有一些字符串的操作老说你的类型不对要改为LPCSTR等等类型的时候,比如你使用很简单的 

七、VC获取系统时间、程序运行时间

   

1.使用CTime

CString str;

//获取系统时间

CTime tm;

tm=CTime::GetCurrentTime();

str=tm.Format("现在时间是%Y%m%d %X");

MessageBox(str,NULL,MB_OK);

2: 得到系统时间日期(使用GetLocalTime)

 

SYSTEMTIME st;

CString strDate,strTime;

GetLocalTime(&st);

strDate.Format("%4d-%2d-%2d",st.wYear,st.wMonth,st.wDay);

strTime.Format("%2d:%2d:%2d",st.wHour,st.wMinute,st.wSecond);

3.使用GetTickCount

//获取程序运行时间

long t1=GetTickCount();//程序段开始前取得系统运行时间(ms)

Sleep(500);

long t2=GetTickCount();();//程序段结束后取得系统运行时间(ms)

str.Format("time:%dms",t2-t1);//前后之差即 程序运行时间

AfxMessageBox(str);

//获取系统运行时间

long t=GetTickCount();

CString str,str1;

str1.Format("系统已运行 %d",t/3600000);

str=str1;

t%=3600000;

str1.Format("%d",t/60000);

str+=str1;

t%=60000;

str1.Format("%d",t/1000);

str+=str1;

AfxMessageBox(str);

(第七条关于VC时间操作的部分为转载)

八、

: fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

我是在windows console下编译  枚举局域网主机名及其ip   的时候遇到这个问题的

 

#include "winsock2.h "

#include <afx.h>//因为要用到CString所以要包含这个头文件
#include <iostream>
using namespace std;

 

后来把头文件包含位置换了下  编译通过

 

#include <afx.h>//因为要用到CString所以要包含这个头文件

#include "winsock2.h "
#include <iostream>
using namespace std;

 

AfxMessageBox("hello world");编译器是会报错的。你只要稍微的改一下变为AfxMessageBox(_T("hello world"));将字符串的类型改为Unicode的类型,这样编译通过,而且此类方法可以扩展,屡试不爽,各位同学可以好好尝试一下。

 

 

原创粉丝点击