VC小技巧 15個問題

2021-06-01 17:52:55 字數 3190 閱讀 2053

一、 一次只執行乙個程式例項

下列兩種方式都可以實現,建議採用第二種方式:

1、 if( findwindow(null,"程式標題")) 

exit(0);

return false;//例項未執行

} 獲得應用程式主視窗的指標:

example: afxgetmainwnd() ->showwindow(sw_showmaxmized); //使程式最大化

四、重新建立字型的**

if(m_fontlogo.m_hobject)

m_fontlogo.detach();

m_fontlogo.createfont(nheight, 0, 0, 0, nweight, bitalic, bunderline,0,0,0,0,0,0, name);

五、用指定顏色填充區域

dc.fillsolidrect(rect, ::getsyscolor(color_3dface));

六、繪製立體字型效果的字型,很值得一看

void ctestview::onpaint() 

七、簡單的訊息檢索和抽取函式,能夠讓系統響應其它操作

bool peekandpump()

使用classwizard處理wm_char訊息,計算nchar參量並決定所執行的操作,使用者可以確定是否修改、傳送字元。下例說明了如何顯示字母字元,如果字元是字母字元,則呼叫cwnd ; onchar,否則不呼叫onchar.

//only display alphabetic dharacters .

void cmyedit : : onchar (uint nchar , uint nrepcnt , uitn nflags )

如果要修改字元,則不能僅僅簡單地用修改過的nchar呼叫cedit : : onchar。要修改乙個字元,需要首先修改nchar,然後用修改過的nchar呼叫cwnd: : defwindowproc。下例說明了如何將字元轉變為大寫:

//make all characters uppercase

void cmyedit : : onchar (uint nchar , uint nrepcnt , uint nflags )

十、串太長時如何在其末尾顯示乙個省略號

呼叫cdc:: drawtext並指定dt_end_ellipsis標誌,這樣就可以用小略號取代串末尾的字元使其適合於指定的邊界矩形。如果要顯示路徑資訊,指定dt_end_ellipsis標誌並省略號取代串中間的字元。

void csampleview:: ondraw (cdc* pdc)

;其次,在文件類的建構函式中初始化crecttracker 物件:

ctestdoc::ctestdoc()

然後,在檢視類的ondraw函式中畫橢圓和蹤跡矩形:

void ctestview::ondraw(cdc* pdc)

最後,檢視類中處理wm_lbuttondown訊息,並增加下述**。該段**根據滑鼠擊鍵情況可以拖放、移動或者重置橢圓的大小。

void ctestview::onlbuttondown(uint nflags, cpoint point) 

else

pdoc->m_tracker.trackrubberband (this,point,true);

cview::onlbuttondown(nflags, point);}十

二、如何在臨時目錄建立乙個臨時檔案

如果你要在臨時目錄下建立臨時檔案,下面的**能幫到你的忙。

bool getuniquetempname (cstring& strtempname)

十三、如何限制視窗的最小範圍

要限制窗體的大小,下面的**能幫到你的忙。

在cmainframe中增加wm_getmaxmininfo訊息的處理函式,然後在這個函式中寫**如下:

//限制主窗體的最小高度和寬度

void cmainframe::ongetminmaxinfo(minmaxinfo far* lpmmi) 

十四、怎樣刪除檔案到**站中

要刪除檔案到**站,很簡單。只要用shfileoperation函式就行了,下面的**我將為你演示了這乙個函式的用法。當然你可以直接拷貝到你的專案中。

//刪除檔案到**站中

//pszpath  : 待刪除的全路徑檔名

//bdelete  : true 刪除,不移到**站,false:移到**站

一、 //返回    : true 刪除成功     false 刪除失敗

bool cdelfiletorecycledlg::recycle(lpctstr pszpath, bool bdelete/*=false*/)

else 

return shfileoperation(&shdelfile);    // do it!}十

五、記憶體洩漏檢查

也許你已經知道,在c++和c語言中指標問題也就是記憶體申請與釋放是乙個令人頭疼的事情,假如你申請了記憶體,但沒有釋放,並且你的程式需要長時間地執行,那麼,系統的資源將逐漸減少,當系統的資源全部被用完時,系統將會崩潰。所以在開發程式的過程中一定要保證資源的完全釋放。下面我們來介紹記憶體漏洞的檢查。

示例如下:

// do your memory allocations and deallocations...

cstring s = "this is a frame variable";

#ifdef _debug

cmemorystate oldmemstate, newmemstate, diffmemstate;

oldmemstate.checkpoint();

#endif

// the next object is a heap object

cstring* p = new cstring( "smith  alan  581_0215" );

delete p;

p=null;

#ifdef _debug

newmemstate.checkpoint();

bool b=diffmemstate.difference(oldmemstate, newmemstate);

if (b)

#endif

根據試驗,由於我們無法釋放掉象int cstring char 申請的變數。只能釋放指標型的變數。而檢測記憶體時,照樣會出現記憶體洩漏現象。所以,這種記憶體檢測方式侷限性還是很大。因為我們無法釋放非指標型變數。

VC小技巧15個

vc小技巧15個 一 一次只執行乙個程式例項 二 裝載游標 三 獲得主框架 獲得應用程式主視窗的指標 example afxgetmainwnd showwindow sw showmaxmized 使程式最大化 四 重新建立字型的 if m fontlogo.m hobject m fontlog...

VC小技巧15個

一 一次只執行乙個程式例項二 裝載游標三 獲得主框架 獲得應用程式主視窗的指標 example afxgetmainwnd showwindow sw showmaxmized 使程式最大化 四 重新建立字型的 if m fontlogo.m hobject m fontlogo.detach m ...

VC小技巧15個

一 一次只執行乙個程式例項二 裝載游標三 獲得主框架 獲得應用程式主視窗的指標 example afxgetmainwnd showwindow sw showmaxmized 使程式最大化 四 重新建立字型的 if m fontlogo.m hobject m fontlogo.detach m ...