MFC经验小总结

1.去除菜单

        在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中加入一句:

         cs.hMenu = NULL;

2:项目->属性->链接器->常规   下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”。
不过这又引入了另外一个警 告:FormatCom.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”规范)
选择项目,属性->配置属性 ->C/C++,修改“调试信息格式”为“程序数据库(/Zi)”即可。

 

3:

cin 相当于 scanf("%s",【变量名】);
cout相当于 printf("%s",【变量名】);

char cstr[100] = "who am i!";   内存为100个字节

wchar_t wstr[100];                ->内存为200的字节 

swprintf(wstr, L"%S", cstr);

 wcstombs(char *dest, const wchar_t *src, size_t n);

 

 

4:查询该文件是ansi 还是unicode突然发现notepad++可以查看 下方 右侧可以标明了是ansi Dos\Windows

 

 

5:调试常用

TRACE宏对于VC下程序调试来说是很有用的东西,有着类似printf的功能;该宏仅仅在程序的DEBUG版本中出现,当RELEASE的时候该宏就完全消失了,从而帮助你调试也在RELEASE的时候减少代码量。相当于 
#ifdef _DEBUG 
AfxDump<<"string in trace ...\n"; 
#endif   
  使用非常简单,格式如下:
  TRACE("DDDDDDDDDDD");
  TRACE("wewe%d",333);
  同样还存在TRACE0,TRACE1,TRACE2。。。分别对应0,1,2。。个参数

  TRACE信息输出到VC IDE环境的输出窗口(该窗口是你编译项目出错提示的哪个窗口),但仅限于你在VC中运行你的DEBUG版本的程序。

 TRACE 宏有点象我们以前在C语言中用的Printf函数,使程序在运行过程中输出一些调试信息,使我们能了解程序的一些状态。但有一点不同的是:


TRACE 宏只有在调试状态下才有所输出,而以前用的Printf 函数在任何情况下都有输出。和Printf 函数一样,TRACE函数可以接受多个参数如:

 

6:struct(在C与C++中的区别)

  struct People {
}

  People  p ; //C++中可以这样  

  struct People ;// C中必须这样

 

7:数组数据易懂

  *(it) = *(it+1)           很简洁的写法

 8:

strlen函数的宽字符版是wcslen(wide-character string length:宽字符串长度),并且在STRING.H(其中也说明了strlen)和WCHAR.H中均有说明。strlen函数说明如下:

size_t __cdecl strlen (const char *) ;        

而wcslen函数则说明如下:

size_t __cdecl wcslen (const wchar_t *) ;        

这时我们知道,要得到宽字符串的长度可以呼叫

iLength = wcslen (pw) ; 

函数将返回字符串中的字符数6。请记住,改成宽字节后,字符串的字符长度不改变,只是位组长度改变了。

 

 

 

Visual Studio 2005 移植 - WINVER,warning C4996, error LINK1104 - 消除.vc2005的sprintf_s警告

最简单的可以用的方法:

选项Project   |   Configuration   Properties   |   C/C++   |   Preprocessor   |   Preprocessor   Definitions  
  添加_CRT_SECURE_NO_DEPRECATE和_SCL_SECURE_NO_DEPRECATE

 

Activex:

ActiveX是Microsoft为抗衡Sun Microsystems的JAVA技术而提出的,此控件的功能和java applet功能类似。

 

 ActiveX控件等价于以前的OLE控件或OCX。

 

而它的所谓“比较底层,和底层操作系统的关系比C#这些高级语言要密切很多”的好处一直都没有体会到

 

正是因为C++比较底层,比较基础,所以它可以开发出很多和语言无关的公用程序块,如dll动态链接库和COM组件,原则上,只要你的Windows的系统,用VC++开发出来的这些公用程序块就能被任何语言调用(如果不用MFC框架,而用ATL框架来编写,甚至还可以脱离Windwos系统,不仅仅实现跨语言,甚至跨平台调用,这个笔者就没有仔细研究了)。

 

 

 ActiveX这门技术是通过生成“*.ocx”文件来实现的。先来了解下OCX文件,在百度百科上面对OCX是这样解释的

 

用VC开发的OCX控件 可以在其它语言里面都能调用

 

 

 

--窗口消息

WM_CTLCOLOR  WM_DRAWITEM 

 

命令消息

     WM_COMMAND   lParam用来区分是命令消息还是控件通知消息  

 

控件通知消息

       WM_NOTIFY  lParam中放的是一个称为NMHDR结构的指针。

 

   NMHDR

     {

         HWnd hWndFrom ; 相当于原WM_COMMAND传递方式的lParam

         UINT idFrom ;    相当于原WM_COMMAND传递方式的wParam(low-order)

         UINT code ;      相当于原WM_COMMAND传递方式的Notify Code(wParam"s high-order)

     };

    

  ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )

 

void CMessageReflectionDlg::OnKeydownList1(NMHDR* pNMHDR, LRESULT* pResult)

    {

     LV_KEYDOWN* pLVKey= (LV_KEYDOWN*)pNMHDR;

     *pResult = 0;

     }

 

 

  ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )

ON_COMMAND(ID_MYCOMMAND, &CMFCListViewDoc::OnMycommand)

 

ON_COMMAND是菜单和工具栏项处理消息的宏          ON_COMMAND(id,memberFxn)    

ON_MESSAGE是处理自定义消息的宏ON_MESSAGE(message,memberFxn)

ON_NOTIFY 是控件向其父窗口发送消息处理的宏ON_NOTIFY( LVN_KEYDOWN, IDC_LIST1, OnKeydownList1 )  

ON_CONTROL(wNotifyCode,id,memberFxn)

 

 

 

Notification Code的命名规律:

 

列表框:   LBN_*****   

 

组合框:   CBN_****

 

Tab框:    TBN_****

 

按钮:    BN_*****

 

Edit :    EN_*****

 

 重叠窗口(Overlapped),弹出窗口(Popup),子窗口(Child)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值