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