原创 CodeProject上的一些摘抄

1.問題: 控件只讀但不要背景變灰。   解決方案: (1)重載控件的WM_CTLCOLOR消息響應(ON_WM_CTLCOLOR_REFLECT()) HBRUSH CReadOnlyEdit::CtlColor(CDC* pDC,

原创 項目中的設計亮點記錄

1.當用到很多種樹形數據結構時,雖然這些樹形數據結構包含的數據類型或者內容不盡相同,但他們在“樹形”方面有很多共性,應該抽象到它們的基類中,這樣可以用它們共有“樹節點”基類去進行樹形數據的共同操作,這個是一種大大減少代碼量的抽象方法。

原创 Socket的阻塞模式和非阻塞模式

阻塞模式   Windows套接字在阻塞和非阻塞兩種模式下執行I/O操作。在阻塞模式下,在I/O操作完成前,執行的操作函數一直等候而不會立即返回,該函數所在的線程會阻塞在這裏。相反,在非阻塞模式下,套接字函數會立即返回,而不管I/O是否

原创 socket選項自帶的TCP異常斷開檢測

TCP異常斷開是指在突然斷電,直接拔網線等等情況下,如果通信雙方沒有進行數據發送通信等處理的時候,無法獲知連接已經斷開的情況.   在通常的情況下,爲了使得socket通信不受操作系統的限制,需要自己在應用層實現心跳包機制,來檢查異常斷開

原创 What static_cast is actually doing

Introduction Most programmers learn C before C++, and get used to C style casting. When writing C++, sometimes we may

原创 enable_shared_from_this和shared_from_this

shared_from_this()是enable_shared_from_this<T>的成員 函數,返回shared_ptr<T>。首先需要注意的是,這個函數僅在shared_ptr<T>的構造函數被調用之後才能使 用。原因是enab

原创 繼續總結CWinThread實現多線程的問題

1.CWinThread的繼承類實現的多線程或者AfxBeginThread()創建的用戶界面線程,在結束的時候通過WM_QUIT消息退出消息循環,這樣就要求在線程退出時消息循環仍然不能出錯,而對於沒有顯式設定主窗口的子線程默認會將主線程

原创 MFC控件積累——CTreeCtrl控件

1.樹控件插入節點: (1)HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct ); (2)HTREEITEM InsertItem( UINT nMask,LPCTSTR lpsz

原创 boost庫中的智能指針向上轉換

   這裏稍微解釋下何謂指針類型的向下轉換和向上轉換。向下轉換是指派生類指針轉換爲基類指針類型,向上轉換是指基類指針類型轉換爲派生類類型。C++一般使用dynamic_cast轉換符實現向上轉換。智能指針可以毫無問題的進行向下類型轉換,

原创 MFC控件積累——CDockablePane控件

1.控制多個CDockablePane停靠在一起時,先停靠一個窗口: DockPane(&m_dockPane1);//使用CFrameWndEx::DockPane() void DockPane( CBasePane*

原创 C++ - 在容器(container)中 使用繼承(inheritance)和虛函數(virtual function)

容器不支持混合類型, 如果直接把派生類對象, 存入基類容器中, 則無法使用派生-基轉換(derived-base conversion); 因爲轉換只能發生在指針和引用 過程中, 不能發生在 對象直接賦值, 如果是直接轉換, 則會產生

原创 c++ shared_ptr智能指針使用注意事項

shared_ptr在boost中地位相當重要,其行爲最接近原始指針,但又比指針更加安全,甚至還能提供基本的線程安全保證。它基本上解決了在使用c++開發過程中不可避免的使用指針而遇到的許多問題,常見的毫無疑問是內存泄漏和內存的提前釋放,

原创 MFC控件積累——CMFCToolBar工具欄控件

在界面上經常用到創建多個工具欄的情況,但MFC自動生成的代碼只創建了一個工具欄,經過我摸索,創建多個工具欄應注意以下問題: 1.CMFCToolBarl類或其繼承類對象創建應使用CreateEx()函數: virtual BOOL

原创 MFC開發中的多線程封裝

MFC開發中的多線程封裝 目錄 一、         基本知識:... 1 1.      線程的啓動與結束... 1 1)      線程的啓動... 1 2)      線程的結束... 2 3)      深入剖析線程的創建與結束函

原创 MFC不能多線程操作控件的原因

對於大多數mfc對象,請不要在線程間傳遞它們,不管是棧上的還是堆上的!原因如下:       1、 mfc的大多數類不是線程安全的,調用傳入對象的成員函數可能不會報錯,但是未必能達到程序預定的功能!       2、 mfc與界面有