VC编程经验01

工作两个月以来的总结


1 用++i代替i++


2 MFC中对话框退出的时候(包括cancel按钮、右上角关闭按钮、快捷键esc)必经的函数是OnCancel()函数
所以如果退出时有操作可继承CDialog类中的OnCancel函数进行统一处理


3 编码时要尽量做到业务与界面的分离,例如要读入对话框的数据最好单独实现,这样可以避免后期因为依赖关系太强难以维护


4 编码要遵循低耦合高内聚的原则,模块功能尽量单一,提高代码重用率


5 在需要使用COM组件的时候必须在开头处加入::CoInitialize(NULL),在结尾处加入::CoUninitalize();而两者的位置放置不合适会导致代码出现问题,所以可以用一      个结构体替换
STRUCT _tagInitCom
{
_tadInitCom(){::CoInitialize(NULL); }
~tagInitCom(){ ::CoUninitalize(); }
};

在使用COM组件之前直接定义一下结构体类型的数据即可:_tagInitCom InitCom;

6 在创建多线程的时候如果同时有界面操作和后台的信息处理,最好将界面操作作为主线程,后台业务处理作为辅助线程(目前还不是很明白为什么,只是直到反过    来容易出问题)


7 在判断指针型字符串是否为空时
用if(szContent == NULL || szContent == "")
不要用if(szContent == "" || szContent == NULL ),因为后者会导致程序挂掉

8 在dll中调对话框的时候要先将本dll的句柄加入到资源链中
HINSTANCE hDll = GetModuleHandle((char*)strPath.GetString());
AfxSetResourceHandle(hDll);

9 static 成员函数没有this指针,所以如果要调用到类中的非静态成员函数需要使用指针
eg.
HANDLE hMailHandler = (HANDLE)_beginthreadex(NULL, 0,&CDlgLicProcCtrl::ApplyLicense,this, NULL,&threadId );
/*static*/unsigned __stdcall CDlgLicProcCtrl::ApplyLicense(PVOID pParam)
{
CDlgLicProcCtrl* pDlg = (CDlgLicProcCtrl*)pParam;
return pDlg->ApplyLicenseHelper();
}

unsigned CDlgLicProcCtrl::ApplyLicenseHelper()
{
...
}

10 对于两组数据一现有、一组动态获取的,两者要一一对应组合成另一组数据时的编程思路
用数组存放现有数据,循环获取动态数据并根据界标获取数组中的数据进行组装
eg. const char*szDesc[] = { "UserID", "UserName", "PrimaryDept", "SecondaryDept", "TertiayDept", "PDU", "ProjectName" };
CString sText;
for(int nID = IDC_EDIT_USERID; nID <= IDC_EDIT_PROJECTNAME; nID++)

{

//获取动态数据

((CEdit*)GetDlgItem(nID))->GetWindowText(sText);

//获取现有数据

StUser.sFieldName = szDesc[nID - IDC_EDIT_USERID];

StUser.sFieldValue = sText;
m_vecUserInfo.push_back(StUser);//组合放入动态容器中
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值