大部份知名的 Design Pattern 實作技巧都是建立在抽像類別上面,因為最近在 C++ 上綀習一些 Design Pattern 時,因為都是操作基底的抽像類別,所以產生了想要知道目前物件到底型態是什麼的需求。
2013年7月13日 星期六
2013年6月23日 星期日
C++ 的 delegate
C++ 是 OOL 沒錯,但卻沒有近代 OOL 常用到的 delegate 語法,這導致有些 Delegation Pattern 在 C++ 上面難以實作得很到位,蠻多文章都會示範如何利用 Interface 來模擬 Delegation Pattern 的方式,但還是有不少令人看起來覺得怪怪的程式碼,前陣子在看一個 OpenSource 專案,名叫 FastDelegate
2013年3月6日 星期三
SetRegistryKey
今天在掃某個 MFC 的專案,注意到有一個叫 SetRegistryKey 的函式,一看到時遲疑了一下,想到其實就在新建立的專案中也可以看到這行,這才發現自己原來不認識,也從來沒去看一下這行 Code 是做什麼的。
2012年10月24日 星期三
字串比較規則
在應用程式中,若可條列出來的資料量不少,通常會幫用戶做排序的動作,
如果是以字串比對排序大小的方式常常會使用 CString.Compare()
但 CString.Compare() 比對大小時,規則是以 Unicode 來比較兩個字串的大小,
在這種情況下,很有可能會發生一種不直覺的現像如下
如果是以字串比對排序大小的方式常常會使用 CString.Compare()
但 CString.Compare() 比對大小時,規則是以 Unicode 來比較兩個字串的大小,
在這種情況下,很有可能會發生一種不直覺的現像如下
2011年10月1日 星期六
Thread Local Storage
在撰寫多緒的軟體時難免會發生主、副執行緒使用同份資料的情況…
有一個修飾字可以讓一個變數安全的讓每個 Thread 都取用同樣的資料即 volatile
但我們如果想要反過來讓每個 Thread 不會影響各自的資料呢?就得用到 TLS 嘍…
有一個修飾字可以讓一個變數安全的讓每個 Thread 都取用同樣的資料即 volatile
但我們如果想要反過來讓每個 Thread 不會影響各自的資料呢?就得用到 TLS 嘍…
2011年3月6日 星期日
callback function
最近在包裝一些程式碼…
主要是讓其他人方便使用又可以讓程式碼達到隱密性的要求…
一直以來只有使用像 AfxBeginThread、STL Sort 這類的 callback 經驗…
以致於忘了一些細節…剛好這次吃了點虧所以印像變深刻了…記錄一下…
主要是讓其他人方便使用又可以讓程式碼達到隱密性的要求…
一直以來只有使用像 AfxBeginThread、STL Sort 這類的 callback 經驗…
以致於忘了一些細節…剛好這次吃了點虧所以印像變深刻了…記錄一下…
2011年3月3日 星期四
2011年2月14日 星期一
2010年12月2日 星期四
2010年10月19日 星期二
使用 alloca 或 malloc?
偶爾我們需要使用 malloc 或 realloc 來配置固定大小的記憶體空間,
使用上使用了這類指令,都要配上等量的 free() 或 delete 來釋放記憶體,
以免造成 memory leak 的狀況,當然也可以使用免 free() 的 alloca 指令。
使用上使用了這類指令,都要配上等量的 free() 或 delete 來釋放記憶體,
以免造成 memory leak 的狀況,當然也可以使用免 free() 的 alloca 指令。
2010年10月1日 星期五
mouse leave 與 mouse event track
在 C++/MFC 中雖然有 MouseLeave 的事件可以選擇,
但選了卻沒有反應,原因是必須加上 Track 追蹤滑鼠,
以下是在 MFC 上實作 Mouse Leave 和 Mouse Over 的簡單範例。
但選了卻沒有反應,原因是必須加上 Track 追蹤滑鼠,
以下是在 MFC 上實作 Mouse Leave 和 Mouse Over 的簡單範例。
標籤:
cpp,
mfc,
windows api
2010年9月28日 星期二
如何獲得 GetLastError() 的文字訊息
在撰寫軟體時常常會接獲錯誤訊息,或在操作某些動作時發現錯誤,
也經常利用 ::GetLastError(); 這支 Windows API 來獲取錯誤代碼,
但是這支API回報的是 DWORD 型態,想知道得更詳細往往要再上網搜尋一番,
當然也有方法可以取得文字訊息,簡單的範例如下。
也經常利用 ::GetLastError(); 這支 Windows API 來獲取錯誤代碼,
但是這支API回報的是 DWORD 型態,想知道得更詳細往往要再上網搜尋一番,
當然也有方法可以取得文字訊息,簡單的範例如下。
標籤:
cpp,
mfc,
windows api
利用 memory dc 解決畫面閃爍問題
重繪時要避免畫面閃爍可以使用 Invalidate(FALSE);
使重繪時不做清除底圖的動作,減少閃爍的情況,
使重繪時不做清除底圖的動作,減少閃爍的情況,
標籤:
cpp,
mfc,
windows api
2010年9月27日 星期一
利用 SetWindowRgn 製作非矩型視窗
在 XP 預設的外觀樣式下,正常的視窗或對話框是上方頂點圓圓的配下方直角,
若有需要做出非預設樣式的視窗時,可以利用 CWnd::SetWindowRgn() 這個 function
這可以用來指定視窗的全部範圍與型狀,
在型狀之外的部份會自動為我們加上背景的遮罩。
若有需要做出非預設樣式的視窗時,可以利用 CWnd::SetWindowRgn() 這個 function
這可以用來指定視窗的全部範圍與型狀,
在型狀之外的部份會自動為我們加上背景的遮罩。
標籤:
cpp,
mfc,
windows api
client area 與 WM_NCHITTEST
在 MFC 中若要製作不同於 Windows 風格的視窗時,
往往會將 Dialog 的 Border 屬性設為 None,
然後利用自己畫背景的方式製作美美的視窗、對話框。
往往會將 Dialog 的 Border 屬性設為 None,
然後利用自己畫背景的方式製作美美的視窗、對話框。
標籤:
cpp,
mfc,
windows api
2010年9月24日 星期五
使用 ISAXContentHandler 解讀 XML 的注意事項
在 C++ 底下要解讀 XML 檔案常用的有兩個方法,一是使用 IE6 就有附加的 CLSID_DOMDocument30 元件,二是使用較底層的 Windows API ISAXContentHandler,兩都都需要 include msxml2.h 檔案
標籤:
cpp,
mfc,
windows api
訂閱:
文章 (Atom)