编程中的细节问题(一)

实现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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值