re: 博客一周年紀念貼 Richard Wei 2013-05-02 19:40
@lwch
嗯,說得好。 確實會收到一些邀請 ^_^
re: 博客一周年紀念貼 Richard Wei 2013-05-01 17:25
@萬連文
確實,無論你寫什么東西,網上都或多或少的有人寫過,但是很多時候你可能是似懂而非懂, 如果你能以別人看的懂的方式寫出來, 就表示你真的懂了。
閱讀優秀源碼我覺的確實是一種除寫博客之外的積累技術好方法, 當然閱讀源碼的前提是你已經有了比較好的技術積累, 你能真正看懂這些源碼,理解作者的想法,理論上通過源碼你可以達到國外技術專家的水平。
另外,不愿分享我覺得也是國內一些技術人員的“通病”, 學了一點“小技巧”就當成寶貝藏著掖著,實際上這樣反而阻礙了自己的成長。
re: 山寨STL Richard Wei 2013-04-18 09:29
@Rick
這個我覺得沒有標準答案, 跟你的C++功底和STL的使用頻率有關,而且個人覺得STL的學習方式既可以走"瀑布"模型,也可以走"敏捷"模型,。
所謂瀑布指的是每步都走踏實之后再進入下一步,比如STL用的很熟練之后再深入原理。所謂敏捷是指先把所有的東西都走一遍,知道大概情況之后再深入每個階段。我覺得兩種方式各有利弊, 主要還是看個人情況。
re: DirectUI中模態對話框和菜單的原理 Richard Wei 2013-04-14 19:10
@春秋十二月
受益就好, 其實關于菜單的原理我也是想了好久才明白的 ^_^
re: irrlicht引擎:為什么我會想著搗鼓這貨 Richard Wei 2013-04-11 09:13
做了幾年客戶端開發,一直想學游戲開發, 無奈數學都忘光了.
如果進入游戲公司不搞核心,只是寫寫邏輯,感覺也沒啥意思.
博主在該領域混,不知有啥建議?
re: google的開源項目總結(轉載) Richard Wei 2013-04-09 21:45
應該是機器翻譯的,看起來挺費勁。
re: DirectUI中模態對話框和菜單的原理 Richard Wei 2013-04-09 10:47
@jacky
這是系統系統的默認行為。
當然我上面的是簡化版的實現, 實際情況要考慮更多問題, 具體可以參考MFC里DoModal的實現源碼
re: 從一道面試題來闡釋一個普遍的認知誤區 Richard Wei 2013-04-08 18:09
分析的不錯,支持下.
re: DirectUI中模態對話框和菜單的原理 Richard Wei 2013-04-08 09:58
@waiting4you
對, OnIdle如果是放在Timer里是沒有影響的 ,如果是自己在在消息循環里調用, 就只能寫成全局函數,然后在這里調用了。
Windows系統對于菜單的實現應該不是用SetCapture的方式, 調用TrackPopupMenu后也是阻塞式的,至于父窗口有保持沒有激活可以看標題欄是不是保持高亮。
re: DirectUI中模態對話框和菜單的原理 Richard Wei 2013-04-08 08:37
@waiting4you
SetCapture的方法應該是不正確定。
菜單彈出時焦點當然還在父窗口上,這是菜單窗口是沒有獲得焦點的, 菜單窗口的鍵盤消息需要父窗口轉發給他。我的測試代碼基本上已經完整的模擬了菜單的行為。
re: 軟件換膚的原理 Richard Wei 2013-03-05 08:59
@mike
這個看產品定位吧?
GDI最通用, 各個系統上都能直接跑;
GDI+稍微有點依賴,但是一般問題不大,開發也方便很多;
D2D性能和效果都不錯,如果自己開發DirectUI的界面庫可以考慮,另外它也不支持XP;
WPF依賴.net, 程序大小和性能方面都有些限制,但是開發效率和效果都不錯。
所以一般來說如果你開發的是通用軟件,比如QQ或者迅雷,既要考慮性能還要考慮各個平臺的支持,在XP沒有消亡之前還是會選擇GDI(+)。
如果你做是項目型的管理軟件, 要考慮開發效率, 一般會選擇WPF。
如果你是自己開發DirectUI界面庫, 可以考慮同時支持GDI(+)和Direct2D。
re: 基于WinDbg的內存泄漏分析 Richard Wei 2013-03-01 20:08
@zuhd
懂得程序運行的原理是關鍵, 工具都差不多, 用GCC和VC一樣可以寫C++代碼。
re: 接口繼承中一個常見問題的思考 Richard Wei 2013-02-27 19:01
@路人甲
是的, C#語言本身支持property, C++中只能通過Get,Set函數了, COM也是這么做的。
re: 基于WinDbg的內存泄漏分析 Richard Wei 2013-02-27 17:30
@Hunter
需要memleaktest.exe的pdb符號文件,我用Vs2008, release版也會默認生成,如果沒有生成就要在編譯選項里設置了。
re: 開源一套DirectUI界面庫 Richard Wei 2013-02-25 20:49
這里有內存泄露 :
else if(info.wParam == WPARAM_KILL_TIMER)
{
if(pTimerRet != NULL)
{
::KillTimer(m_hWnd, pTimerRet->nTimerIndex);
m_arTimer.erase(std::remove(m_arTimer.begin(), m_arTimer.end(), pTimerRet), m_arTimer.end());
delete pTimerRet; //內存泄露
lRet = S_OK;
}
}
re: 在C++范型編程中如何只特化類的一個成員函數 Richard Wei 2013-02-23 16:28
@a_very_big_graywolf
只是總結, 以后再用到會方便一些。
不錯, 前2個需求也可以用繼承來實現, 但是如果該特化函數基類內部有調用,就可能要搞成虛函數了。
re: 接口繼承中一個常見問題的思考 Richard Wei 2013-02-20 20:57
@korall
不錯 ,這種可能更通用, 雖然我一直沒用。
已在文章后面加上你提的方案。:)
re: 范型編程雜談 Richard Wei 2013-02-19 17:11
@華夏之火
不錯, 從C++11的變化可以看到好多新特性都是針對模板編程的,范型編程是C++編程的趨勢
re: 在C++范型編程中如何只特化類的一個成員函數 Richard Wei 2013-02-19 09:01
re: 在C++范型編程中如何只特化類的一個成員函數 Richard Wei 2013-02-15 20:41
@lwch
慚愧, 雖然工作好多年,最近才開始研究模板,準備稍微深入一下。
re: 在C++范型編程中如何只特化類的一個成員函數 Richard Wei 2013-02-14 21:31
@lwch
不懂, 什么意思?
不過看了你的博客,學習了 ^_^
re: 在C++中實現事件(委托) Richard Wei 2013-02-07 17:03
@Jeff Chen
慚愧, 沒研究過boost。
可能優點就是簡單,可以自己掌控吧,實際上好多公司是禁用boost的。
re: 在C++中實現事件(委托) Richard Wei 2013-02-01 17:05
@zdhsoft
恩,本身就是借助c++11的 function和bind進行封裝
re: 在C++中實現事件(委托) Richard Wei 2013-01-31 17:36
@lierlier
多謝指點,感覺你的實現方式對外界比較靈活,性能也比較高。
而我的實現更強調封裝,適合于在某個框架中使用。
re: 在C++中實現事件(委托) Richard Wei 2013-01-31 14:49
@lierlier
確實, 所以.Net里的事件返回類型都都void。這里帶返回值的事件適用于只有一個函數綁定。
re: 2012龍年之旅 Richard Wei 2013-01-27 22:00
牛, 一個人把微軟一幫人的事情都做了。
啥時候寫文章介紹下微軟RPC內部的實現原理, 對這個比較有興趣, 呵呵。
re: 理解WinRT Richard Wei 2013-01-13 17:47
re: 理解WinRT Richard Wei 2013-01-13 17:44
@bukebushuo
WinRT的定義看這里:
http://en.wikipedia.org/wiki/Windows_RuntimeWindows Runtime, or WinRT, is a platform-homogeneous application architecture on the Windows 8 and Windows RT operating systems.
re: QQ截圖時窗口自動識別的原理 Richard Wei 2012-12-20 13:11
@嘿嘿
是的, QQ這種實時的方式如果啟動截圖后, 后臺窗口一變, 識別出來的就是錯誤的了.
我這種在啟動截圖時保存所有窗口Rect的做法才是可靠的.
re: QQ截圖時窗口自動識別的原理 Richard Wei 2012-11-17 20:12
看到有些人對窗口識別的代碼感興趣,在博文最后加上了通過Enum方式查詢窗口的代碼
re: 略說成員函數指針及其模板的精簡實現 Richard Wei 2012-11-16 17:32
還是直接用C++ 11中的function吧
re: 范型編程雜談 Richard Wei 2012-11-11 23:56
re: C++模板會使代碼膨脹嗎 Richard Wei 2012-11-09 08:42
@溪流
繼承和模板在一定程度上都可以實現代碼重用, 我想我們平時所說的模板使代碼膨脹是相對OO里的繼承而言.
re: GacUI 0.4.0.0 發布啦 Richard Wei 2012-10-19 15:09
Hoho, 支持下大牛
re: 消息耦合還是接口耦合 Richard Wei 2012-10-15 10:25
@zaccheo
接口的管理,我感覺有2種方式: 一種是基于COM的引用計數,大家都可以保存接口指針,這里要避免循環引用;還有一種是讓Module Manger統一管理,也就是只有Module Manager保存有接口指針,其他模塊不保存接口指針,要使用時統一向Module Manger要。
第一種高效,第二種相對安全
re: 消息耦合還是接口耦合 Richard Wei 2012-10-13 22:28
@123
我們是客戶端應用,各模塊內部卻確實會有多線程,但是各模塊間的調用及事件觸發都是跑在主線程里,所以這種情況下,如果走消息,基本上要給每個消息維護一個數組,內部保存哪些人訂閱了該消息,當該消息到達時進行依次分發,所以這里無論是內存大小還是性能都會比接口直接調用消耗更多。
接口每個方法都有各自不同的明確的參數定義, 消息的話因為要求所有消息參數一致,所以會導致參數含義不明確,內部保存的指針需要強制轉換才能使用。
"客戶端小規模應用";是相對“大規模Server集群”, 其實我們要做的東西本身也挺大挺復雜,好幾十人同時開發。
re: 桌面上嵌入窗口(桌面日歷)原理探索 Richard Wei 2012-09-29 16:17
在Win7的Aero模式下因為桌面的窗口層次有變化, 上面的代碼會找不到窗口"SHELLDLL_DefView"窗口
簡單改了下,未完全測試:
HWND GetShellDLLForWin7()
{
HWND hWndShell = NULL;
HWND hWndDesktop = GetDesktopWindow();
if(hWndDesktop == NULL) return NULL;
HWND hWndWorkerW = NULL;
while(TRUE)
{
hWndWorkerW = FindWindowEx(hWndDesktop, hWndWorkerW, _T("WorkerW"), NULL);
if(hWndWorkerW == NULL) break;
if(::GetWindowLong(hWndWorkerW, GWL_STYLE) & WS_VISIBLE)
{
break;
}
else
{
continue;
}
}
if(hWndWorkerW != NULL)
{
hWndShell = FindWindowEx(hWndWorkerW, NULL, _T("SHELLDLL_DefView"), NULL);
}
return hWndShell;
}
BOOL CheckParent(HWND hWnd)
{
static HWND s_hWndOldParent = NULL;
HWND hWndProgram = NULL;
HWND hWndShellDLL = NULL;
hWndProgram = FindWindow(_T("Progman"), _T("Program Manager"));
if(hWndProgram != NULL)
{
hWndShellDLL = FindWindowEx(hWndProgram, NULL, _T("SHELLDLL_DefView"), NULL);
//Win7
if(hWndShellDLL == NULL)
{
hWndShellDLL = GetShellDLLForWin7();
}
}
if(hWndShellDLL != NULL
&& hWndShellDLL != s_hWndOldParent)
{
SetWindowLong(hWnd, GWL_HWNDPARENT, (LONG)hWndShellDLL);
s_hWndOldParent = hWndShellDLL;
return TRUE;
}
return FALSE;
}
@萬連文
確實,C++11里把這個叫住Alias templates
re: 從《C++ Primer 第四版》入手學習 C++ Richard Wei 2012-09-21 18:00
good
re: 理解程序內存 Richard Wei 2012-09-20 19:25
@春秋十二月
沒看過windows高級調試一書, 但是感覺比較經典的書是<<軟件調試>>
re: API Hook在TA中的應用 Richard Wei 2012-09-19 19:14
@birdhsy
不好意思,因為是公司代碼,所以不好外傳
re: QQ截圖時窗口自動識別的原理 Richard Wei 2012-09-06 12:47