编程中的细节问题(一)

来源:互联网 发布:ubuntu 休眠 编辑:程序博客网 时间:2024/05/17 21:44

实现MFC对话框中控件的焦点下移

先在对话框的编辑界面Ctrl+D,对控件进行编号;然后为对话框添加如下虚函数:

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg){    //按下Esc时啥也不做    if(pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_ESCAPE)            return TRUE;         //按下Enter实现焦点随控件的编号下移    if((pMsg->message == WM_KEYDOWN) && (VK_RETURN == (int) pMsg->wParam))    {        if(GetFocus()->GetDlgCtrlID() != IDOK)        {            pMsg->wParam = VK_TAB;        }    }    return CDialogEx::PreTranslateMessage(pMsg);}

http://blog.csdn.net/hswangjiajia/article/details/12979379?locationNum=15

路径字符串的处理

通过文件对话框取得的文件路径字符串是不能直接使用的,因为其中的单引号会被当成转义符处理。所以通常需要对其进行替换处理:(window系统下)

strPath.Replace("\\","\\\\")

不要这样做:

CString str;str=strPath.Replace("\\","\\\\");

这样会报错:

error C2440: “初始化”: 无法从“int*”转换为“ATL::CStringT

#

这是因为:

int Replace(PCXSTR pszOld,PCXSTR pszNew);
用字符串pszNew替换CString对象中的子字符串pszOld,返回替换的字符个数。
https://baike.baidu.com/item/CString/5015952?fr=aladdin

组合框控件中字符串的获取

1.假设在控件列表中已经选定某项,现在要得到被选定项的内容,首先要得到该项的位置,然后得到对应位置的内容。这里会用到两个函数,如:int nIndex = m_cbExample.GetCurSel();CString strCBText;m_cbExample.GetLBText( nIndex, strCBText);这样,得到的内容就保存在 strCBText 中。2.若要选取当前内容,可调用函数GetWindowText(strCBText)。这里指变化前的框中正显示的内容。

组合框的使用方法:
http://blog.csdn.net/banrixianxin/article/details/25928529

列表控件中数据的完全清除(包括表头)

    m_list.DeleteAllItems();    //先删除所有数据行(item)    int nColumnCount = m_list.GetHeaderCtrl()->GetItemCount();    //获得表头的数目    for (int i=0; i < nColumnCount; i++)    {       m_list.DeleteColumn(0);    //逐一删除列,注意括号里是0,因为删除一列后,下一列会前移    }

列表控件的其他方法:
http://blog.csdn.net/smallstonesk/article/details/24931273