原创 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與界面有