学习笔记总结(VC)
1。關(guān)于SendMessage發(fā)送CString的問題
方法1:
Send: CString *str = new CString ("aaa");
?????????????? hwnd->SendMessage(WM_USER,0,(LPARAM)str);
Recv:?? void myproc(.......)? //自定義消息處理函數(shù)
{????????? CString *pstr = (CString*)lparam;
??????????? .......
??????????? delete pstr; //注意此處要?jiǎng)h除前面send處new出來的CString????? }
方法2:
CString s="aaa";
hwnd->SendMessage(WM_USER,0,(LPARAM)(LPCTSTR)s);
Recv:?? void myproc(.......)? //自定義消息處理函數(shù)
{? LPCTSTR pstr=(LPCTSTR)lparam;
................??????? }
2。查找窗口FindWindow( a, b)
a 窗口類名,根據(jù)跟蹤看,VC中用“#32770”代替此參數(shù),即可查找出所有彈出的窗口,一般情況下可作NULL。
b 窗口標(biāo)題,正常查找某一個(gè)窗口,即可用此參數(shù)作唯一標(biāo)識。
3。CEdit滑塊根據(jù)內(nèi)容自動(dòng)滾動(dòng)
UpdateData(FALSE);???????? //注意更新控件
m_edit.LineScroll(m_edit.GetLineCount( ),0 );?? //參數(shù)一是行數(shù),參數(shù)二是該行的字符位置;
注意:edit控件要設(shè)為multiline屬性。
用此方法,即可保證在輸入多行字符后,edit控件能自動(dòng)滾動(dòng)至最后一行。
?
要滾動(dòng)CEdit,?? 下面幾種辦法都可以:??
? m_edit.SendMessage(?? WM_VSCROLL,?? SB_LINEDOWN,?? 0?? );??
? m_edit.LineScroll(?? 3,?? 3?? );??
? ::SendMessage(m_edit.m_hWnd,EM_LINESCROLL,3,12);?????
????
? 簡單的方法,讓字符在指定的行數(shù)顯示:??
? int?? index?? =?? m_edit.LineIndex(?? 5?? );??
? m_edit.SetSel(?? index,?? index?? );??
? m_edit.ReplaceSel(?? "dir"?? );
4。判斷程序是否已啟動(dòng)
方法 1:
CYourApp::InitInstance()
{?CreateMutex(?? NULL,?? FALSE,?? "Application?? Mutex"?? );//?? 添加互斥量?,參數(shù)3自定義即可??
????
?if(GetLastError()==ERROR_ALREADY_EXISTS)??
?{??
??AfxMessageBox("程序以運(yùn)行!");??
??return?? FALSE;??
?} }
方法 2 :查找到以后,激活程序到前臺,但FindWindow過程中,如果有同名的文件夾,而程序沒啟,文件夾窗口會(huì)被激活-_-||? 方法有些小問題待改進(jìn)。
CYourApp::InitInstance()
{?CString? strCaption;??
?strCaption.LoadString(AFX_IDS_APP_TITLE);??
?CWnd* pwndFirst = CWnd::FindWindow(NULL, strCaption);??
?if (pwndFirst)??
?{??
??//?? another?? instance?? is?? already?? running?? -?? activate?? it??
??CWnd* pwndPopup = pwndFirst->GetLastActivePopup();??
??pwndFirst->SetForegroundWindow();??
??pwndFirst->ShowWindow(SW_SHOWNORMAL);??
??if(pwndFirst != pwndPopup)??
???pwndPopup->SetForegroundWindow();??
??return FALSE;??
?} }
5。CTreeCtrl傳遞參數(shù)問題
插入樹中的TVINSERTSTRUCT結(jié)構(gòu)有參數(shù),可通過lparam傳遞,也可通過SetItemData設(shè)置,并通過GetItemData獲取。
注意:傳遞的參數(shù)是指針值,所以要注意原始傳遞的參數(shù)的有效期,否則傳遞過去的即可能不存在而消失。
????????? 參數(shù)可以是普通的CString,也可以是結(jié)構(gòu)指針。
???? TVINSERTSTRUCT tvInsert;
???? tvInsert.hParent = hParent;
???? tvInsert.hInsertAfter = NULL;
???? tvInsert.item.iImage = 0;
???? tvInsert.item.iSelectedImage = 0;
???? tvInsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
???? tvInsert.item.pszText = (LPTSTR)(LPCTSTR)ph.Name; //標(biāo)題
???? //tvInsert.item.lParam = (LPARAM)(LPCTSTR)ph.Num;? //指針傳值
????
???? HTREEITEM hSub = m_Infotree.InsertItem(&tvInsert);?
???? m_Infotree.SetItemData(hSub2,(DWORD)(LPCTSTR)ph.Num);? //設(shè)置該樹枝的參數(shù)供傳遞
在onselchange事件中處理參數(shù):
void CTabDlg0::OnSelchangedInfotree(NMHDR* pNMHDR, LRESULT* pResult)
{
?NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
?// TODO: Add your control notification handler code here
?
?/* 獲取TVITEM的lparam參數(shù)值
?LPCTSTR str=(LPCTSTR)pNMTreeView->itemNew.lParam;
??if(CString(str)!="")
???? AfxMessageBox(CString(str));*/
????
?//獲取設(shè)置的itemData方法,也可在程序其他部分調(diào)用該部分獲取傳遞參數(shù)
?HTREEITEM hSelected = pNMTreeView->itemNew.hItem;
?LPCTSTR str = (LPCTSTR)m_Infotree.GetItemData(hSelected);
????????
?*pResult = 0;
}
6。CTreeCtrl遍歷循環(huán)方法(參考)
?void Tree{
HTREEITEM hitem=NULL;
?CString str;
?hitem=m_Infotree.GetRootItem();??? //取得根節(jié)點(diǎn)
?while(hitem)
?{
??//str=m_Infotree.GetItemText (hitem);
??Traversal(hitem);
??hitem=m_Infotree.GetNextSiblingItem (hitem); //取得指定節(jié)點(diǎn)hitem的下一個(gè)兄弟節(jié)點(diǎn)
?}
}
void Traversal(HTREEITEM hitem)??? //函數(shù)Traversal( )采用遞歸方法遍歷指定節(jié)點(diǎn)hitem的所有子節(jié)點(diǎn)
{
??? HTREEITEM hnext;
??? CString str;
??? hnext=m_Infotree.GetChildItem(hitem);??? //取得指定節(jié)點(diǎn)hitem的子節(jié)點(diǎn)
??? while(hnext)
?{?
//str=m_Infotree.GetItemText (hnext);????????
??????? Traversal(hnext);
??????? hnext=m_Infotree.GetNextSiblingItem(hnext);? //GetPrevSiblingItem( )取兄弟節(jié)點(diǎn)的上一節(jié)點(diǎn)
??? }
}
總結(jié)
以上是生活随笔為你收集整理的学习笔记总结(VC)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 删除windows隐藏的本地连接
- 下一篇: 苹果再发 iOS / iPadOS 17