锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if (CTLCOLOR_STATIC == nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)GetStockObject(NULL_BRUSH);
}
// TODO: 濡傛灉榛樿鐨勪笉鏄墍闇鐢葷瑪錛屽垯榪斿洖鍙︿竴涓敾絎?/span>
return hbr;
}
鏁堟灉濡傚浘錛?br>
鍦ㄥぇ澶氭暟鎯呭喌涓嬭繖縐嶆柟娉曢兘娌¢棶棰橈紝浣嗘槸錛屽綋闇瑕佸姩鎬佹洿鏀歸潤鎬佹枃鏈涓殑鍐呭鏃跺氨浼氬嚭鐜拌繖鏍風殑闂錛?br>
涔熷氨鏄嚭鐜頒簡鏂囧瓧閲嶅彔鐜拌薄銆?br>
鍏跺師鍥犲嚭鍦?#8220;閫忔槑”韜笂銆備竴鑸儏鍐典笅鍦ㄧ粯鍒剁晫闈㈡椂浼氬厛緇樺埗瀵硅瘽妗嗙殑鑳屾櫙鐒跺悗鎵嶄細緇樺埗瀛愭帶浠訛紝鑰屽瓙鎺т歡閫氬父閮戒細鑷粯鍏惰儗鏅殑錛屼簬鏄瓙鎺т歡緇樺埗瀹屼箣鍚庡氨浼氱洊浣忓璇濇鍘熷厛鎵緇樺埗鐨勪竴閮ㄥ垎鍐呭錛屾墍浠?#8220;閫忔槑”鏁堟灉灝辨槸闈犵姝㈠瓙鎺т歡鑷粯鑳屾櫙鑰屽疄鐜扮殑銆?br>
浜嗚В浜?#8220;閫忔槑”鍚庯紝鍐嶆潵鍥炲埌鍒氭墠鐨勯棶棰樹笂銆傚洜涓虹幇鍦ㄩ潤鎬佹枃鏈涓嶄細鍘繪摝闄よ儗鏅屽彧鏄粯鍒跺嚭鏂囧瓧錛屼簬鏄箣鍓嶇殑“嫻嬭瘯”灝變細孌嬬暀鍦ㄥ璇濇鑳屾櫙涓婏紝鍙湁寮曡搗瀵硅瘽妗嗚儗鏅噸緇樻椂鎵嶈兘鍘繪帀銆備簬鏄紝鎴戜滑搴旇鍦ㄨ緗畬鏂囨湰妗嗙殑鏂囧瓧鍚庡啀璁╁璇濇閲嶇粯鑳屾櫙鎵嶈銆?br>淇敼涓涓?#8220;鏇存敼鏂囨湰”鎸夐挳鍝嶅簲鍑芥暟錛?br>
{
CString tmp;
GetDlgItemText(IDC_EDIT1 , tmp);
SetDlgItemText(IDC_STATIC1 , tmp);
// 涓涓嬩負鏂版坊鍔犲唴瀹廣傚彧闇灞閮ㄩ噸緇樿儗鏅嵆鍙?br> CRect rect;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);
ScreenToClient(&rect);
InvalidateRect(&rect);
UpdateWindow();
}
榪欐牱涓鏉ュ氨鏇村ソ鐨勫疄鐜頒簡“閫忔槑”銆?br>
浠ヤ笂鍙槸灝忓紵鐨勪竴浜涚悊瑙o紝濡傛灉鏈変粈涔堝湴鏂硅鐨勪笉瀵癸紝鎴栬呬綘鏈夋洿濂界殑鏂規硶鏉ュ疄鐜?#8220;閫忔槑”錛岃繕鏈涘憡鐭ワ紝灝忓紵鍏堣阿榪囦簡 : P
]]>
涓鑸潵璇達紝鐢╒isual C++緙栧埗闇瑕佹墦鍗扮殑紼嬪簭鏃訛紝鍦ㄧ敤AppWizard鐢熸垚宸ョ▼鏂囦歡鏃跺氨鍔犲叆鎵撳嵃鍜屾墦鍗伴瑙堥夐」錛堣閫夐」鍦ˋppWizard鐨勭鍥涙錛夈傝嫢鐢ㄦ墜宸ュ姞鍏ワ紝鍒欑◢寰夯鐑︿簺銆?
MFC瀵逛簬鎵撳嵃鐨勬敮鎸佹槸鍦ㄨ綾籆View涓疄鐜扮殑錛岃綾諱腑鏈夊涓嬪嚑涓垚鍛樺嚱鏁版槸涓庢墦鍗版垨鎵撳嵃棰勮鏈夊叧鐨勶細
BOOL OnPreparePrinting(CPrintInfo顎抪Info)
void OnBeginPrinting(CDC顎抪DC, CPrintInfo顎抪Info)
void OnPrepareDC(CDC顎抪DC, CPrintInfo顎抪Info)
void OnPrint(CDC顎抪DC, CPrintInfo顎抪Info)
void OnEndPrinting(CDC顎抪DC, CPrintInfo顎抪Info)
鍏朵腑錛宲DC鏄墦鍗版垨鏄劇ず鐨勮澶囧満鎸囬拡錛宲Info鏄墦鍗拌繃紼嬩俊鎭寚閽堛俻Info鍖呭惈璁稿鏈夌敤鐨勪俊鎭紝濡傛墦鍗扮殑鎬婚〉鏁般佸綋鍓嶆墦鍗伴〉鐨勯〉鐮併佹槸鎵撳嵃榪樻槸鎵撳嵃棰勮銆佹槸鍚︾戶緇墦鍗扮瓑錛屽叿浣撳弬鏁板唴瀹瑰拰鎰忎箟鍙互鍙傝僊FC鑱旀満鎵嬪唽銆?
浠ヤ笂鍑犱釜鍑芥暟閮芥槸铏氬嚱鏁幫紝鍙互閲嶈澆銆傝嫢鍦ㄧ敤AppWizard鐢熸垚宸ョ▼鏂囦歡鏃墮夋嫨浜嗘墦鍗板拰鎵撳嵃棰勮閫夐」錛屽垯鍑芥暟OnPreparePrinting銆丱nBeginPrinting銆丱nEndPrinting鑷姩鍦拌AppWizard鎻掑叆鍒頒綘鐨勮綾諱腑鍔犱互閲嶈澆銆傚彟澶栦袱涓嚱鏁板垯鍙互鎵嬪伐鍔犲叆錛屽鏋滀嬌鐢ㄧ殑鏄疺isual C++ 4.0浠ヤ笂鐗堟湰錛屽彲浠ラ氳繃ClassWizard鍔犲叆鍒拌綾諱腑銆?
榪欏嚑涓嚱鏁板湪鐢ㄦ埛閫夋嫨鎵撳嵃鍛戒護鏃剁敱搴旂敤妗嗘灦鑷姩璋冪敤錛岀敤鎴風▼搴忎笉鐢ㄦ樉寮忚皟鐢ㄣ備笅闈㈣榪拌繖鍑犱釜鍑芥暟鍦ㄦ墦鍗拌繃紼嬩腑鐨勮皟鐢ㄩ『搴忓強鍏舵剰涔夈?
1.OnPreparePrinting
OnPreparePrinting鍑芥暟鏈鍏堣璋冪敤錛岀敤鏉ュ垵濮嬪寲鎵撳嵃鏈虹瓑銆傛瘮濡傦紝鑻ユ病鏈夊畨瑁呮墦鍗版満錛屽垯璇ュ嚱鏁板皢鎻愮ず鐢ㄦ埛瀹夎鎵撳嵃鏈恒傜敤鎴風▼搴忓彲浠ュ悜鍏朵腑鍔犲叆鍒殑鍒濆鍖栦唬鐮侊紝姣斿錛岃綆楁墦鍗頒綘鐨勬枃妗f墍闇瑕佺殑鎬婚〉鏁幫紝鐒跺悗璋冪敤瑙嗙被涓殑鎵撳嵃鏈哄垵濮嬪寲鍑芥暟BOOL DoPreparePrinting(CPrintInfo顎抪Info)鍗沖彲銆傝岀敤AppWizard鐢熸垚鐨勪唬鐮佷腑錛孫nPreparePrinting鍑芥暟灝嗗彧鏄皟鐢ㄥ嚱鏁癉oPreparePrinting錛屽茍浼犻掑弬鏁般?
2.OnBeingPrinting
OnBeingPrinting鍑芥暟鏄紑濮嬫墦鍗版枃妗e墠璋冪敤鐨勫嚱鏁幫紝鐢ㄦ埛鍙互鍦ㄥ叾涓姞鍏ュ彟涓浜涘浜庢墦鍗拌繃紼嬬殑鍒濆鍖栦唬鐮侊紝姣斿鍒嗛厤鎵撳嵃榪囩▼涓皢瑕佷嬌鐢ㄧ殑“絎?#8221;錛圕Pen錛夈?#8220;鍒峰瓙”錛圕Brush錛夌瓑錛岄粯璁ょ殑浠g爜涓鍑芥暟灝嗙洿鎺ヨ繑鍥炪?
3.OnEndPrinting
OnEndPrinting鍑芥暟鏄笌OnBeginPrinting鍑芥暟鐩稿搴旂殑鍑芥暟錛屽畠鍦ㄦ墦鍗板畬鎴愬悗鐢卞簲鐢ㄦ鏋惰皟鐢紝鐢ㄤ簬閲婃斁鍦∣nBeginPrinting涓垎閰嶇殑“瀵硅薄”錛屽“絎?#8221;銆?#8220;鍒峰瓙”絳夛紝鍏墮粯璁ょ殑浠g爜涓鍑芥暟灝嗙洿鎺ヨ繑鍥炪?
4.OnPrepareDC
OnPrepareDC鍑芥暟鐢ㄤ簬鍦ㄦ墦鍗板墠鍑嗗鎵撳嵃璁懼鍦猴紝濡傜獥鍙eぇ灝忋佸師鐐癸紝瑙嗗浘澶у皬銆佸師鐐圭瓑銆傚悓鏃惰鍑芥暟鍦ㄨ綾繪樉紺烘枃妗e唴瀹規椂涔熻璋冪敤錛岄粯璁ょ殑浠g爜涓鍑芥暟璋冪敤鍩虹被涓殑OnPrepareDC鍑芥暟銆?
5.OnPrint
OnPrint鍑芥暟鍒欐槸鍏蜂綋鐨勬墦鍗拌繃紼嬶紝瀹冨埄鐢ㄥ墠闈㈠噯澶囧ソ鐨勮澶囧満榪涜鎵撳嵃銆?
榪欏嚑涓嚱鏁頒腑錛孫nPreparePrinting銆丱nBeginPrinting銆丱nEndPrinting鍑芥暟鍦ㄤ竴嬈℃墦鍗拌繃紼嬩腑灝嗗彧琚皟鐢ㄤ竴嬈★紝涓嶇榪欎竴嬈℃墦鍗板唴瀹規湁澶氬皯欏碉紝鑰孫nPrepareDC銆丱nPrint鍑芥暟鍒欐瘡鎵撳嵃涓欏甸兘灝嗚璋冪敤涓嬈★紝榪欑璋冪敤嬈″簭瀵逛簬鎵撳嵃鏄緢鏈夌敤鐨勩?
鍦ㄧ紪紼嬩腑錛岀浉淇″ぇ瀹跺彧瑕佺敤濂借繖鍑犱釜鍩烘湰鍑芥暟錛屼竴瀹氫細緙栧埗鍑烘弧鎰忕殑Windows鎵撳嵃紼嬪簭銆?
]]>
“
Only windows that have the CS_DBLCLKS
”銆?br>
鐪嬪埌榪欒鏂囧瓧鍚庯紝鎴戜究璁や負鏄繘搴︽潯鐨剋ndclass瀵硅薄涓病鏈塁S_DBCLKS錛岀粡涓嬮潰浠g爜紜錛岃瘉鏄庝簡鎴戠殑姝g‘
涓轟簡璁╄繘搴︽潯鍙互鑾峰彇榧犳爣鍙屽嚮錛屽彧闇鍦∣nInitDialog涓姞鍏ュ涓嬩袱琛屼唬鐮佷究鍙互浜嗭細
2錛?濡傛灉鍦ㄥ悓涓涓嚎紼嬪唴錛孭ostMessage鍙戦佹秷鎭椂錛屾秷鎭鍏堟斁鍏ョ嚎紼嬬殑娑堟伅闃熷垪錛岀劧鍚庨氳繃娑堟伅寰幆Dispatch鍒扮洰鏍囩獥鍙c係endMessage鍙戦佹秷鎭椂錛岀郴緇熺洿鎺ヨ皟鐢ㄧ洰鏍囩獥鍙g殑娑堟伅澶勭悊紼嬪簭錛屽茍灝嗙粨鏋滆繑鍥炪係endMessage鍦ㄥ悓涓綰跨▼涓彂閫佹秷鎭茍涓嶅叆綰跨▼娑堟伅闃熷垪銆?濡傛灉鍦ㄤ笉鍚岀嚎紼嬪唴銆傛渶濂界敤PostThreadMessage浠f浛PostMessage,浠栧伐浣滅殑寰堝ソ銆係endMessage鍙戦佹秷鎭埌鐩爣紿楀彛鎵灞炵殑綰跨▼鐨勬秷鎭槦鍒楋紝鐒跺悗鍙戦佹秷鎭殑綰跨▼絳夊緟(浜嬪疄涓婏紝浠栧簲璇ヨ繕鍦ㄥ仛涓浜涚洃嫻嬪伐浣滐紝姣斿鐩戣QS_SENDMESSAGE鏍囧織)錛岀洿鍒扮洰鏍囩獥鍙e鐞嗗畬騫朵笖緇撴灉榪斿洖錛屽彂閫佹秷鎭殑綰跨▼鎵嶇戶緇繍琛屻傝繖鏄疭endMessage鐨勪竴鑸儏鍐碉紝浜嬪疄涓婏紝澶勭悊榪囩▼瑕佸鏉傜殑澶氥傛瘮濡傦紝褰撳彂閫佹秷鎭殑綰跨▼鐩戞祴鍒版湁鍒殑紿楀彛SendMessage涓涓秷鎭埌鏉ユ椂錛屼粬鐩存帴璋冪敤紿楀彛澶勭悊榪囩▼(閲嶅叆)錛屽茍灝嗗鐞嗙粨鏋滆繑鍥?榪欎釜榪囩▼涓嶉渶瑕佹秷鎭驚鐜腑GetMessage絳夌殑鏀寔)銆?
3錛?msdn: If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), its message parameters can not include pointers. Otherwise, the operation will fail.
濡傛灉鍙戦佺殑娑堟伅鐮佸湪WM_USER涔嬩笅(闈炶嚜瀹氫箟娑堟伅)涓旀秷鎭弬鏁頒腑甯︽湁鎸囬拡錛岄偅涔圥ostMessage,SendNotifyMessage,SendMessageCallback榪欎簺寮傛娑堟伅鍙戦佸嚱鏁板皢浼氳皟鐢ㄥけ璐ャ?鏈濂戒笉瑕佺敤PostMessage鍙戦佸甫鏈夋寚閽堝弬鏁扮殑娑堟伅銆?/font>
鍦ㄤ笂闈㈢殑浠g爜涓紝鍙互鍦―oSomethingBeforeMsgLoop()鍑芥暟涓嬌鐢⊿howWindow()鏉ラ殣钘忕獥鍙o紝鍚屾椂榪樺彲浠ユ墽琛屽叾瀹冧竴浜涙搷浣滐紝涔熷彲浠ョ洿鎺ュ湪DoSomethingBeforeMsgLoop()鍑芥暟璋冪敤澶勮皟鐢⊿howWindow()鍑芥暟鏉ラ殣钘忕獥鍙c?/p>
涔熸湁浜烘彁鍑轟簡鍏跺畠鏂規硶銆傛瘮濡備粛鐒朵嬌鐢ㄦā鎬佸璇濇錛屼絾浣跨敤璁℃暟鍣ㄨ瀹氬緢鐭竴涓椂闂存潵瑙﹀彂浜嬩歡錛屽茍鍦ㄥ鐞嗚璁℃暟鍣ㄤ簨浠朵腑闅愯棌紿楀彛銆傝鏂規硶鍙錛屼絾澶夯鐑︼紝娌℃湁涓婇潰鐨勬柟娉曟柟渚褲?/p>
棣栧厛浣犻渶瑕佽緗垪琛ㄦ帶浠舵墍浣跨敤鐨処mageList錛屽鏋滀綘浣跨敤澶у浘鏍囨樉紺洪鏍鹼紝浣犲氨闇瑕佷互濡備笅褰㈠紡璋冪敤錛?
CImageList* SetImageList( CImageList* pImageList, LVSIL_NORMAL);
濡傛灉浣跨敤鍏跺畠涓夌椋庢牸鏄劇ず鑰屼笉鎯蟲樉紺哄浘鏍囦綘鍙互涓嶈繘琛屼換浣曡緗紝鍚﹀垯闇瑕佷互濡備笅褰㈠紡璋冪敤錛?
CImageList* SetImageList( CImageList* pImageList, LVSIL_SMALL);
閫氳繃璋冪敤int InsertItem( int nItem, LPCTSTR lpszItem );鍙互鍦ㄥ垪琛ㄦ帶浠朵腑nItem鎸囨槑浣嶇疆鎻掑叆涓欏癸紝lpszItem涓烘樉紺哄瓧絎︺傞櫎LVS_REPORT椋庢牸澶栧叾浠栦笁縐嶉鏍奸兘鍙渶瑕佺洿鎺ヨ皟鐢?InsertItem灝卞彲浠ヤ簡錛屼絾濡傛灉浣跨敤鎶ヨ〃椋庢牸灝卞繀欏誨厛璁劇疆鍒楄〃鎺т歡涓殑鍒椾俊鎭?/p>
閫氳繃璋冪敤int InsertColumn( int nCol, LPCTSTR lpszColumnHeading, int nFormat , int nWidth, int nSubItem);鍙互鎻掑叆鍒椼俰Col涓哄垪鐨勪綅緗紝浠庨浂寮濮嬶紝lpszColumnHeading涓烘樉紺虹殑鍒楀悕錛宯Format涓烘樉紺哄榻愭柟寮忥紝 nWidth涓烘樉紺哄搴︼紝nSubItem涓哄垎閰嶇粰璇ュ垪鐨勫垪绱㈠紩銆?
鍦ㄦ湁澶氬垪鐨勫垪琛ㄦ帶浠朵腑灝遍渶瑕佷負姣忎竴欏規寚鏄庡叾鍦ㄦ瘡涓鍒椾腑鐨勬樉紺哄瓧絎︼紝閫氳繃璋冪敤
BOOL SetItemText( int nItem, int nSubItem, LPTSTR lpszText );鍙互璁劇疆姣忓垪鐨勬樉紺哄瓧絎︺俷Item涓鴻緗殑欏圭殑浣嶇疆錛宯SubItem涓哄垪浣嶇疆錛宭pszText涓烘樉紺哄瓧絎︺備笅闈㈢殑浠g爜婕旂ず浜嗗浣曡緗鍒楀茍鎻掑叆鏁版嵁錛?
m_list.SetImageList(&m_listSmall,LVSIL_SMALL);//璁劇疆ImageList
m_list.InsertColumn(0,"Col 1",LVCFMT_LEFT,300,0);//璁劇疆鍒?br>m_list.InsertColumn(1,"Col 2",LVCFMT_LEFT,300,1);
m_list.InsertColumn(2,"Col 3",LVCFMT_LEFT,300,2);
m_list.InsertItem(0,"Item 1_1");//鎻掑叆琛?br>m_list.SetItemText(0,1,"Item 1_2");//璁劇疆璇ヨ鐨勪笉鍚屽垪鐨勬樉紺哄瓧絎?br>m_list.SetItemText(0,2,"Item 1_3");
姝ゅCListCtrl榪樻彁渚涗簡涓浜涘嚱鏁扮敤浜庡緱鍒?淇敼鎺т歡鐨勭姸鎬併?
COLORREF GetTextColor( )/BOOL SetTextColor( COLORREF cr );鐢ㄤ簬寰楀埌/璁劇疆鏄劇ず鐨勫瓧絎﹂鑹層?
COLORREF GetTextBkColor( )/BOOL SetTextBkColor( COLORREF cr );鐢ㄤ簬寰楀埌/璁劇疆鏄劇ず鐨勮儗鏅鑹層?
void SetItemCount( int iCount );鐢ㄤ簬寰楀埌娣誨姞榪涘垪琛ㄤ腑欏圭殑鏁伴噺銆?
BOOL DeleteItem(int nItem);鐢ㄤ簬鍒犻櫎鏌愪竴欏癸紝BOOL DeleteAllItems( );灝嗗垹闄ゆ墍鏈夐」銆?
BOOL SetBkImage(HBITMAP hbm, BOOL fTile , int xOffsetPercent, int yOffsetPercent);鐢ㄤ簬璁劇疆鑳屾櫙浣嶅浘銆?
CString GetItemText( int nItem, int nSubItem );鐢ㄤ簬寰楀埌鏌愰」鐨勬樉紺哄瓧絎︺?
鍒楄〃鎺т歡鐨勬秷鎭槧灝勫悓鏍蜂嬌鐢∣N_NOTIFY瀹忥紝褰㈠紡濡傚悓錛歄N_NOTIFY( wNotifyCode, id, memberFxn )錛寃NotifyCode涓洪氱煡浠g爜錛宨d涓轟駭鐢熻娑堟伅鐨勭獥鍙D錛宮emberFxn涓哄鐞嗗嚱鏁幫紝鍑芥暟鐨勫師鍨嬪鍚寁oid OnXXXList(NMHDR* pNMHDR, LRESULT* pResult)錛屽叾涓璸NMHDR涓轟竴鏁版嵁緇撴瀯錛屽湪鍏蜂綋浣跨敤鏃墮渶瑕佽漿鎹㈡垚鍏朵粬綾誨瀷鐨勭粨鏋勩傚浜庡垪琛ㄦ帶浠跺彲鑳藉彇鍊煎拰瀵瑰簲鐨勬暟鎹粨鏋勪負錛?
鍏充簬ON_NOTIFY鏈夊緢澶氬唴瀹癸紝灝嗗湪浠ュ悗鐨勫唴瀹逛腑榪涜璇︾粏璁茶В銆?
鍏充簬鍔ㄦ佹彁渚涚粨鐐規墍鏄劇ず鐨勫瓧絎︼細棣栧厛浣犲湪欏規椂闇瑕佹寚鏄巐pszItem鍙傛暟涓猴細 LPSTR_TEXTCALLBACK銆傚湪鎺т歡鏄劇ず璇ョ粨鐐規椂浼氶氳繃鍙戦乀VN_GETDISPINFO鏉ュ彇寰楁墍闇瑕佺殑瀛楃錛屽湪澶勭悊璇ユ秷鎭椂鍏堝皢鍙傛暟 pNMHDR杞崲涓篖PNMLVDISPINFO錛岀劧鍚庡~鍏呭叾涓璱tem.pszText銆傞氳繃item涓殑iItem,iSubItem鍙互鐭ラ亾褰撳墠鏄劇ず鐨勪負閭d竴欏廣備笅闈㈢殑浠g爜婕旂ず浜嗚繖縐嶆柟娉曪細
鍏充簬緙栬緫鏌愰」鐨勬樉紺哄瓧絎︼細錛堝湪鎶ヨ〃椋庢牸涓彧瀵圭涓鍒楁湁鏁堬級棣栧厛闇瑕佽緗垪琛ㄦ帶浠剁殑 LVS_EDITLABELS椋庢牸錛屽湪寮濮嬬紪杈戞椂璇ユ帶浠跺皢浼氬彂閫丩VN_BEGINLABELEDIT錛屼綘鍙互閫氳繃鍦ㄥ鐞嗗嚱鏁頒腑榪斿洖TRUE鏉ュ彇娑堟帴涓嬫潵鐨勭紪杈戯紝鍦ㄧ紪杈戝畬鎴愬悗浼氬彂閫丩VN_ENDLABELEDIT錛屽湪澶勭悊璇ユ秷鎭椂闇瑕佸皢鍙傛暟pNMHDR杞崲涓篖PNMLVDISPINFO錛岀劧鍚庨氳繃鍏朵腑鐨刬tem.pszText寰楀埌緙栬緫鍚庣殑瀛楃錛屽茍閲嶇疆鏄劇ず瀛楃銆傚鏋滅紪杈戝湪涓斾腑鍙栨秷璇ュ彉閲忎負NULL銆備笅闈㈢殑浠g爜璇存槑濡備綍澶勭悊榪欎簺娑堟伅錛?
涓婇潰璁茶堪鐨勬柟娉曟墍榪涜鐨勬秷鎭槧灝勫繀欏誨湪鐖剁獥鍙d腑榪涜錛堝悓鏍稺M_NOTIFY鐨勬墍鏈夋秷鎭兘闇瑕佸湪鐖剁獥鍙d腑澶勭悊錛夈?
濡備綍寰楀埌褰撳墠閫変腑欏逛綅緗細鍦ㄥ垪琛ㄦ帶浠朵腑娌℃湁涓涓被浼間簬ListBox涓璆etCurSel()鐨勫嚱鏁幫紝浣嗘槸鍙互閫氳繃璋冪敤GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);寰楀埌閫変腑欏逛綅緗?/p>
涓嬮潰鏄竴浜涗緥瀛?/p>
浣滆咃細lixiaosan
鏃墮棿錛?4/06/2006
浠ヤ笅鏈粡璇存槑錛宭istctrl榛樿view 椋庢牸涓簉eport
鐩稿叧綾誨強澶勭悊鍑芥暟
MFC錛欳ListCtrl綾?/p>
SDK錛氫互 “ListView_”寮澶寸殑涓浜涘畯銆傚 ListView_InsertColumn
--------------------------------------------------------------------------------
1. CListCtrl 椋庢牸
LVS_ICON: 涓烘瘡涓猧tem鏄劇ず澶у浘鏍?br> LVS_SMALLICON: 涓烘瘡涓猧tem鏄劇ず灝忓浘鏍?br> LVS_LIST: 鏄劇ず涓鍒楀甫鏈夊皬鍥炬爣鐨刬tem
LVS_REPORT: 鏄劇ずitem璇︾粏璧勬枡
鐩磋鐨勭悊瑙o細windows璧勬簮綆$悊鍣紝“鏌ョ湅”鏍囩涓嬬殑“澶у浘鏍囷紝灝忓浘鏍囷紝鍒楄〃錛岃緇嗚祫鏂?#8221;
--------------------------------------------------------------------------------
2. 璁劇疆listctrl 椋庢牸鍙婃墿灞曢鏍?br> LONG lStyle;
lStyle. = GetWindowLong(m_list.m_hWnd, GWL_STYLE);//鑾峰彇褰撳墠紿楀彛style
lStyle. &= ~LVS_TYPEMASK; //娓呴櫎鏄劇ず鏂瑰紡浣?br> lStyle.|= LVS_REPORT; //璁劇疆style
SetWindowLong(m_list.m_hWnd, GWL_STYLE, lStyle);//璁劇疆style
DWORD dwStyle. = m_list.GetExtendedStyle();
dwStyle.|= LVS_EX_FULLROWSELECT;//閫変腑鏌愯浣挎暣琛岄珮浜紙鍙傜敤涓巖eport椋庢牸鐨刲istctrl錛?br> dwStyle.|= LVS_EX_GRIDLINES;//緗戞牸綰匡紙鍙傜敤涓巖eport椋庢牸鐨刲istctrl錛?br> dwStyle.|= LVS_EX_CHECKBOXES;//item鍓嶇敓鎴恈heckbox鎺т歡
m_list.SetExtendedStyle(dwStyle); //璁劇疆鎵╁睍椋庢牸
娉細listview鐨剆tyle璇鋒煡闃卪sdn
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceshellui5/html/wce50lrflistviewstyles.asp
--------------------------------------------------------------------------------
3. 鎻掑叆鏁版嵁
m_list.InsertColumn( 0, "ID", LVCFMT_LEFT, 40 );//鎻掑叆鍒?br> m_list.InsertColumn( 1, "NAME", LVCFMT_LEFT, 50 );
int nRow = m_list.InsertItem(0, “11”);//鎻掑叆琛?br> m_list.SetItemText(nRow, 1, “jacky”);//璁劇疆鏁版嵁
--------------------------------------------------------------------------------
4. 涓鐩撮変腑item
閫変腑style涓殑Show selection always錛屾垨鑰呭湪涓婇潰絎?鐐逛腑璁劇疆LVS_SHOWSELALWAYS
--------------------------------------------------------------------------------
5. 閫変腑鍜屽彇娑堥変腑涓琛?/strong>
int nIndex = 0;
//閫変腑
m_list.SetItemState(nIndex, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
//鍙栨秷閫変腑
m_list.SetItemState(nIndex, 0, LVIS_SELECTED|LVIS_FOCUSED);
--------------------------------------------------------------------------------
6. 寰楀埌listctrl涓墍鏈夎鐨刢heckbox鐨勭姸鎬?/strong>
m_list.SetExtendedStyle(LVS_EX_CHECKBOXES);
CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED || m_list.GetCheck(i))
{
str.Format(_T("絎?d琛岀殑checkbox涓洪変腑鐘舵?), i);
AfxMessageBox(str);
}
}
--------------------------------------------------------------------------------
7. 寰楀埌listctrl涓墍鏈夐変腑琛岀殑搴忓彿
鏂規硶涓錛?br> CString str;
for(int i=0; i<m_list.GetItemCount(); i++)
{
if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED )
{
str.Format(_T("閫変腑浜嗙%d琛?), i);
AfxMessageBox(str);
}
}
鏂規硶浜岋細
POSITION pos = m_list.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
else
{
while (pos)
{
int nItem = m_list.GetNextSelectedItem(pos);
TRACE1("Item %d was selected!\n", nItem);
// you could do your own processing on nItem here
}
}
--------------------------------------------------------------------------------
8. 寰楀埌item鐨勪俊鎭?/strong>
TCHAR szBuf[1024];
LVITEM lvi;
lvi.iItem = nItemIndex;
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
lvi.pszText = szBuf;
lvi.cchTextMax = 1024;
m_list.GetItem(&lvi);
鍏充簬寰楀埌璁劇疆item鐨勭姸鎬侊紝榪樺彲浠ュ弬鑰僲sdn鏂囩珷
Q173242: Use Masks to Set/Get Item States in CListCtrl
http://support.microsoft.com/kb/173242/en-us
--------------------------------------------------------------------------------
9. 寰楀埌listctrl鐨勬墍鏈夊垪鐨刪eader瀛楃涓插唴瀹?br> LVCOLUMN lvcol;
char str[256];
int nColNum;
CString strColumnName[4];//鍋囧鏈?鍒?/p>
nColNum = 0;
lvcol.mask = LVCF_TEXT;
lvcol.pszText = str;
lvcol.cchTextMax = 256;
while(m_list.GetColumn(nColNum, &lvcol))
{
strColumnName[nColNum] = lvcol.pszText;
nColNum++;
}
--------------------------------------------------------------------------------
10. 浣縧istctrl涓竴欏瑰彲瑙侊紝鍗蟲粴鍔ㄦ粴鍔ㄦ潯
m_list.EnsureVisible(i, FALSE);
--------------------------------------------------------------------------------
11. 寰楀埌listctrl鍒楁暟
int nHeadNum = m_list.GetHeaderCtrl()->GetItemCount();
--------------------------------------------------------------------------------
12. 鍒犻櫎鎵鏈夊垪
鏂規硶涓錛?br> while ( m_list.DeleteColumn (0))
鍥犱負浣犲垹闄や簡絎竴鍒楀悗錛屽悗闈㈢殑鍒椾細渚濇鍚戜笂縐誨姩銆?/p>
鏂規硶浜岋細
int nColumns = 4;
for (int i=nColumns-1; i>=0; i--)
m_list.DeleteColumn (i);
--------------------------------------------------------------------------------
13. 寰楀埌鍗曞嚮鐨刲istctrl鐨勮鍒楀彿
娣誨姞listctrl鎺т歡鐨凬M_CLICK娑堟伅鐩稿簲鍑芥暟
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// 鏂規硶涓錛?br> /*
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
int nItem = m_list.SubItemHitTest(&lvinfo);
if(nItem != -1)
{
CString strtemp;
strtemp.Format("鍗曞嚮鐨勬槸絎?d琛岀%d鍒?, lvinfo.iItem, lvinfo.iSubItem);
AfxMessageBox(strtemp);
}
*/
// 鏂規硶浜?
/*
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
CString strtemp;
strtemp.Format("鍗曞嚮鐨勬槸絎?d琛岀%d鍒?,
pNMListView->iItem, pNMListView->iSubItem);
AfxMessageBox(strtemp);
}
*/
*pResult = 0;
}
--------------------------------------------------------------------------------
14. 鍒ゆ柇鏄惁鐐瑰嚮鍦╨istctrl鐨刢heckbox涓?/strong>
娣誨姞listctrl鎺т歡鐨凬M_CLICK娑堟伅鐩稿簲鍑芥暟
void CTest6Dlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
m_list.ScreenToClient(&point);
LVHITTESTINFO lvinfo;
lvinfo.pt = point;
lvinfo.flags = LVHT_ABOVE;
UINT nFlag;
int nItem = m_list.HitTest(point, &nFlag);
//鍒ゆ柇鏄惁鐐瑰湪checkbox涓?br> if(nFlag == LVHT_ONITEMSTATEICON)
{
AfxMessageBox("鐐瑰湪listctrl鐨刢heckbox涓?);
}
*pResult = 0;
}
--------------------------------------------------------------------------------
15. 鍙抽敭鐐瑰嚮listctrl鐨刬tem寮瑰嚭鑿滃崟
娣誨姞listctrl鎺т歡鐨凬M_RCLICK娑堟伅鐩稿簲鍑芥暟
void CTest6Dlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(pNMListView->iItem != -1)
{
DWORD dwPos = GetMessagePos();
CPoint point( LOWORD(dwPos), HIWORD(dwPos) );
CMenu menu;
VERIFY( menu.LoadMenu( IDR_MENU1 ) );
CMenu* popup = menu.GetSubMenu(0);
ASSERT( popup != NULL );
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this );
}
*pResult = 0;
}
--------------------------------------------------------------------------------
16. item鍒囨崲鐒︾偣鏃?鍖呮嫭鐢ㄩ敭鐩樺拰榧犳爣鍒囨崲item鏃?錛岀姸鎬佺殑涓浜涘彉鍖栭『搴?/strong>
娣誨姞listctrl鎺т歡鐨凩VN_ITEMCHANGED娑堟伅鐩稿簲鍑芥暟
void CTest6Dlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CString sTemp;
if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED &&
(pNMListView->uNewState & LVIS_FOCUSED) == 0)
{
sTemp.Format("%d losted focus",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 &&
(pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED)
{
sTemp.Format("%d got focus",pNMListView->iItem);
}
if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED &&
(pNMListView->uNewState & LVIS_SELECTED) == 0)
{
sTemp.Format("%d losted selected",pNMListView->iItem);
}
else if((pNMListView->uOldState & LVIS_SELECTED) == 0 &&
(pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED)
{
sTemp.Format("%d got selected",pNMListView->iItem);
}
*pResult = 0;
}
--------------------------------------------------------------------------------
17. 寰楀埌鍙︿竴涓繘紼嬮噷鐨刲istctrl鎺т歡鐨刬tem鍐呭
http://www.codeproject.com/threads/int64_memsteal.asp
--------------------------------------------------------------------------------
18. 閫変腑listview涓殑item
Q131284: How To Select a Listview Item Programmatically
http://support.microsoft.com/kb/131284/en-us
--------------------------------------------------------------------------------
19. 濡備綍鍦–ListView涓嬌鐢–ListCtrl鐨勬淳鐢熺被
http://www.codeguru.com/cpp/controls/listview/introduction/article.php/c919/
--------------------------------------------------------------------------------
20. listctrl鐨剆ubitem娣誨姞鍥炬爣
m_list.SetExtendedStyle(LVS_EX_SUBITEMIMAGES);
m_list.SetItem(..); //鍏蜂綋鍙傛暟璇峰弬鑰僲sdn
--------------------------------------------------------------------------------
21. 鍦–ListCtrl鏄劇ず鏂囦歡錛屽茍鏍規嵁鏂囦歡綾誨瀷鏉ユ樉紺哄浘鏍?/strong>
緗戜笂鎵懼埌鐨勪唬鐮侊紝share
BOOL CTest6Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
HIMAGELIST himlSmall;
HIMAGELIST himlLarge;
SHFILEINFO sfi;
char cSysDir[MAX_PATH];
CString strBuf;
memset(cSysDir, 0, MAX_PATH);
GetWindowsDirectory(cSysDir, MAX_PATH);
strBuf = cSysDir;
sprintf(cSysDir, "%s", strBuf.Left(strBuf.Find("\\")+1));
himlSmall = (HIMAGELIST)SHGetFileInfo ((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON );
himlLarge = (HIMAGELIST)SHGetFileInfo((LPCSTR)cSysDir,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
if (himlSmall && himlLarge)
{
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_SMALL, (LPARAM)himlSmall);
::SendMessage(m_list.m_hWnd, LVM_SETIMAGELIST,
(WPARAM)LVSIL_NORMAL, (LPARAM)himlLarge);
}
return TRUE; // return TRUE unless you set the focus to a control
}
void CTest6Dlg::AddFiles(LPCTSTR lpszFileName, BOOL bAddToDocument)
{
int nIcon = GetIconIndex(lpszFileName, FALSE, FALSE);
CString strSize;
CFileFind filefind;
// get file size
if (filefind.FindFile(lpszFileName))
{
filefind.FindNextFile();
strSize.Format("%d", filefind.GetLength());
}
else
strSize = "0";
// split path and filename
CString strFileName = lpszFileName;
CString strPath;
int nPos = strFileName.ReverseFind('\\');
if (nPos != -1)
{
strPath = strFileName.Left(nPos);
strFileName = strFileName.Mid(nPos + 1);
}
// insert to list
int nItem = m_list.GetItemCount();
m_list.InsertItem(nItem, strFileName, nIcon);
m_list.SetItemText(nItem, 1, strSize);
m_list.SetItemText(nItem, 2, strFileName.Right(3));
m_list.SetItemText(nItem, 3, strPath);
}
int CTest6Dlg::GetIconIndex(LPCTSTR lpszPath, BOOL bIsDir, BOOL bSelected)
{
SHFILEINFO sfi;
memset(&sfi, 0, sizeof(sfi));
if (bIsDir)
{
SHGetFileInfo(lpszPath,
FILE_ATTRIBUTE_DIRECTORY,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES |(bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
else
{
SHGetFileInfo (lpszPath,
FILE_ATTRIBUTE_NORMAL,
&sfi,
sizeof(sfi),
SHGFI_SMALLICON | SHGFI_SYSICONINDEX |
SHGFI_USEFILEATTRIBUTES | (bSelected ? SHGFI_OPENICON : 0));
return sfi.iIcon;
}
return -1;
}
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/KataDoc360/archive/2009/05/18/4195356.aspx
When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don't call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. Modal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup.