长期在MFC下使用VC++,记录一些基础的常用的功能与技巧
(长期更新)
1、SetDlgItemText (IDC_BUTTON1,_T("这个是按钮改变后的标题"));
2、GetDlgItem(IDC_BUTTON1)->ShowWindow(SW_SHOW);//SW_HIDE
3、if(IDCANCEL==AfxMessageBox(_T("即将打开窗口,是否继续!"),MB_OKCANCEL|MB_ICONWARNING)) return;
4、CString与int转换。
strValue.Format(L"%d", 1);//float为"%f"
int a = _ttoi(strValue);
5、内存泄漏检查。在初始时加入_CrtSetBreakAlloc(453);//453为调试时编译器提供的内存泄漏地方
启动调试后会在内存泄漏的地方停止,方便排除问题。
6、注册热键。RegisterHotKey(GetSafeHwnd(),7788,NULL,VK_SPACE);//初始化时加入,VK_SPACE为空格
7、if (strMsg.CompareNoCase(_T("T")))//true为strMsg==T
strMsg.Find(T("T"));//0为strMsg包含有TCString a,b;
a = "123456789";
b =a.Left(4); //值为:1234
b =a.Mid(3); //值为:456789
b = a.Mid(2, 4); //值为:3456
b = a.Right(4); //值为:678
8、用事件同步线程。
ResetEvent(g_hStopRecv);
SetEvent(g_hStopRecv);
初始化中添加:HANDLE g_hStopRecv = ::CreateEvent(NULL, TRUE, FALSE, _T("728-CB70"));
线程中添加:if (WaitForSingleObject(g_hStopRecv, 0) == WAIT_OBJECT_0) break;
9、TCHAR与CString转换。很多场合用TCHAR保存或传递数据比较方便。
//CString转TCHAR
CString strTemp = _T("哈哈哈");
memset(szTemp, 0, sizeof(TCHAR)*MAX_PATH);
_tcsncpy(szTemp, strTemp, strTemp.GetLength());
//TCHAR转CString
TCHAR szTemp[MAX_PATH];
szTemp="哇哈哈";
CString strTemp;
strTemp.Format(_T("%s"), szTemp);
10、串口发送字符串要求换行时:
CString strSend(_T("ha"));
strSend.Format(_T("%s%c%c"),strSendMsg,0x0D,0x0A);//0x0D:\r,0x0A:\n
11、线程使用
/*声明*/
HANDLE m_hThreadWaitRecData;
static DWORD WINAPI ThreadWaitRecData(LPVOID lpData);
/*关闭该线程*/
if (!m_hThreadWaitRecData)
{
CloseHandle(m_hThreadWaitRecData);
m_hThreadWaitRecData = NULL;
}
/*初始化*/
m_hThreadWaitRecData = NULL;
/*建立线程*/
DWORD dwThreadID = 0;
if (m_hThreadWaitRecData == NULL)
m_hThreadWaitRecData = ::CreateThread(NULL, 0, CXXXDlg::ThreadWaitRecData, this, 0, &dwThreadID);
/*线程函数*/
DWORD CXXXDlg::ThreadWaitRecData(LPVOID lpParam)
{
if (NULL==(CXXXDlg*)lpParam) return 0;
while (1)
{
((CXXXDlg*)lpParam)->DoSomething();
}
}
12、CWnd 与HWND的转换
/*CWnd转HWND*/
CWnd *pWnd = GetDlgItem(IDC_DLG_XXX);
HWND hWnd = pWnd->GetSafeHwnd();
/*HWND转CWnd*/
HWND hWnd=GetSafeHwnd();
CWnd* pWnd;
pWnd=FromHandle(hWnd);
/*获取父窗口的句柄*/
HWND hWndCtrl=::GetParent(GetSafeHwnd());