re: 博客一周年紀(jì)念貼 Richard Wei 2013-05-02 19:40
@lwch
嗯,說得好。 確實會收到一些邀請 ^_^
re: 博客一周年紀(jì)念貼 Richard Wei 2013-05-01 17:25
@萬連文
確實,無論你寫什么東西,網(wǎng)上都或多或少的有人寫過,但是很多時候你可能是似懂而非懂, 如果你能以別人看的懂的方式寫出來, 就表示你真的懂了。
閱讀優(yōu)秀源碼我覺的確實是一種除寫博客之外的積累技術(shù)好方法, 當(dāng)然閱讀源碼的前提是你已經(jīng)有了比較好的技術(shù)積累, 你能真正看懂這些源碼,理解作者的想法,理論上通過源碼你可以達(dá)到國外技術(shù)專家的水平。
另外,不愿分享我覺得也是國內(nèi)一些技術(shù)人員的“通病”, 學(xué)了一點“小技巧”就當(dāng)成寶貝藏著掖著,實際上這樣反而阻礙了自己的成長。
re: 山寨STL Richard Wei 2013-04-18 09:29
@Rick
這個我覺得沒有標(biāo)準(zhǔn)答案, 跟你的C++功底和STL的使用頻率有關(guān),而且個人覺得STL的學(xué)習(xí)方式既可以走"瀑布"模型,也可以走"敏捷"模型,。
所謂瀑布指的是每步都走踏實之后再進(jìn)入下一步,比如STL用的很熟練之后再深入原理。所謂敏捷是指先把所有的東西都走一遍,知道大概情況之后再深入每個階段。我覺得兩種方式各有利弊, 主要還是看個人情況。
re: DirectUI中模態(tài)對話框和菜單的原理 Richard Wei 2013-04-14 19:10
@春秋十二月
受益就好, 其實關(guān)于菜單的原理我也是想了好久才明白的 ^_^
re: irrlicht引擎:為什么我會想著搗鼓這貨 Richard Wei 2013-04-11 09:13
做了幾年客戶端開發(fā),一直想學(xué)游戲開發(fā), 無奈數(shù)學(xué)都忘光了.
如果進(jìn)入游戲公司不搞核心,只是寫寫邏輯,感覺也沒啥意思.
博主在該領(lǐng)域混,不知有啥建議?
re: DirectUI中模態(tài)對話框和菜單的原理 Richard Wei 2013-04-09 10:47
@jacky
這是系統(tǒng)系統(tǒng)的默認(rèn)行為。
當(dāng)然我上面的是簡化版的實現(xiàn), 實際情況要考慮更多問題, 具體可以參考MFC里DoModal的實現(xiàn)源碼
re: DirectUI中模態(tài)對話框和菜單的原理 Richard Wei 2013-04-08 09:58
@waiting4you
對, OnIdle如果是放在Timer里是沒有影響的 ,如果是自己在在消息循環(huán)里調(diào)用, 就只能寫成全局函數(shù),然后在這里調(diào)用了。
Windows系統(tǒng)對于菜單的實現(xiàn)應(yīng)該不是用SetCapture的方式, 調(diào)用TrackPopupMenu后也是阻塞式的,至于父窗口有保持沒有激活可以看標(biāo)題欄是不是保持高亮。
re: DirectUI中模態(tài)對話框和菜單的原理 Richard Wei 2013-04-08 08:37
@waiting4you
SetCapture的方法應(yīng)該是不正確定。
菜單彈出時焦點當(dāng)然還在父窗口上,這是菜單窗口是沒有獲得焦點的, 菜單窗口的鍵盤消息需要父窗口轉(zhuǎn)發(fā)給他。我的測試代碼基本上已經(jīng)完整的模擬了菜單的行為。
re: 軟件換膚的原理 Richard Wei 2013-03-05 08:59
@mike
這個看產(chǎn)品定位吧?
GDI最通用, 各個系統(tǒng)上都能直接跑;
GDI+稍微有點依賴,但是一般問題不大,開發(fā)也方便很多;
D2D性能和效果都不錯,如果自己開發(fā)DirectUI的界面庫可以考慮,另外它也不支持XP;
WPF依賴.net, 程序大小和性能方面都有些限制,但是開發(fā)效率和效果都不錯。
所以一般來說如果你開發(fā)的是通用軟件,比如QQ或者迅雷,既要考慮性能還要考慮各個平臺的支持,在XP沒有消亡之前還是會選擇GDI(+)。
如果你做是項目型的管理軟件, 要考慮開發(fā)效率, 一般會選擇WPF。
如果你是自己開發(fā)DirectUI界面庫, 可以考慮同時支持GDI(+)和Direct2D。
re: 基于WinDbg的內(nèi)存泄漏分析 Richard Wei 2013-03-01 20:08
@zuhd
懂得程序運行的原理是關(guān)鍵, 工具都差不多, 用GCC和VC一樣可以寫C++代碼。
re: 接口繼承中一個常見問題的思考 Richard Wei 2013-02-27 19:01
@路人甲
是的, C#語言本身支持property, C++中只能通過Get,Set函數(shù)了, COM也是這么做的。
re: 基于WinDbg的內(nèi)存泄漏分析 Richard Wei 2013-02-27 17:30
@Hunter
需要memleaktest.exe的pdb符號文件,我用Vs2008, release版也會默認(rèn)生成,如果沒有生成就要在編譯選項里設(shè)置了。
re: 開源一套DirectUI界面庫 Richard Wei 2013-02-25 20:49
這里有內(nèi)存泄露 :
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; //內(nèi)存泄露
lRet = S_OK;
}
}
@a_very_big_graywolf
只是總結(jié), 以后再用到會方便一些。
不錯, 前2個需求也可以用繼承來實現(xiàn), 但是如果該特化函數(shù)基類內(nèi)部有調(diào)用,就可能要搞成虛函數(shù)了。
re: 接口繼承中一個常見問題的思考 Richard Wei 2013-02-20 20:57
@korall
不錯 ,這種可能更通用, 雖然我一直沒用。
已在文章后面加上你提的方案。:)
re: 范型編程雜談 Richard Wei 2013-02-19 17:11
@華夏之火
不錯, 從C++11的變化可以看到好多新特性都是針對模板編程的,范型編程是C++編程的趨勢
@lwch
慚愧, 雖然工作好多年,最近才開始研究模板,準(zhǔn)備稍微深入一下。
@lwch
不懂, 什么意思?
不過看了你的博客,學(xué)習(xí)了 ^_^
re: 在C++中實現(xiàn)事件(委托) Richard Wei 2013-02-07 17:03
@Jeff Chen
慚愧, 沒研究過boost。
可能優(yōu)點就是簡單,可以自己掌控吧,實際上好多公司是禁用boost的。
re: 在C++中實現(xiàn)事件(委托) Richard Wei 2013-02-01 17:05
@zdhsoft
恩,本身就是借助c++11的 function和bind進(jìn)行封裝
re: 在C++中實現(xiàn)事件(委托) Richard Wei 2013-01-31 17:36
@lierlier
多謝指點,感覺你的實現(xiàn)方式對外界比較靈活,性能也比較高。
而我的實現(xiàn)更強調(diào)封裝,適合于在某個框架中使用。
re: 在C++中實現(xiàn)事件(委托) Richard Wei 2013-01-31 14:49
@lierlier
確實, 所以.Net里的事件返回類型都都void。這里帶返回值的事件適用于只有一個函數(shù)綁定。
re: 2012龍年之旅 Richard Wei 2013-01-27 22:00
牛, 一個人把微軟一幫人的事情都做了。
啥時候?qū)懳恼陆榻B下微軟RPC內(nèi)部的實現(xiàn)原理, 對這個比較有興趣, 呵呵。
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-11 23:56
@r.h
用GP實現(xiàn)運行時多態(tài)在C++ 中現(xiàn)在來說還做不到,ATL同時用了GP和OO。
有興趣的話可以看下這篇
http://m.shnenglu.com/longshanks/archive/2007/12/06/37915.aspx
re: C++模板會使代碼膨脹嗎 Richard Wei 2012-11-09 08:42
@溪流
繼承和模板在一定程度上都可以實現(xiàn)代碼重用, 我想我們平時所說的模板使代碼膨脹是相對OO里的繼承而言.
re: GacUI 0.4.0.0 發(fā)布啦 Richard Wei 2012-10-19 15:09
Hoho, 支持下大牛
re: 消息耦合還是接口耦合 Richard Wei 2012-10-15 10:25
@zaccheo
接口的管理,我感覺有2種方式: 一種是基于COM的引用計數(shù),大家都可以保存接口指針,這里要避免循環(huán)引用;還有一種是讓Module Manger統(tǒng)一管理,也就是只有Module Manager保存有接口指針,其他模塊不保存接口指針,要使用時統(tǒng)一向Module Manger要。
第一種高效,第二種相對安全
re: 消息耦合還是接口耦合 Richard Wei 2012-10-13 22:28
@123
我們是客戶端應(yīng)用,各模塊內(nèi)部卻確實會有多線程,但是各模塊間的調(diào)用及事件觸發(fā)都是跑在主線程里,所以這種情況下,如果走消息,基本上要給每個消息維護(hù)一個數(shù)組,內(nèi)部保存哪些人訂閱了該消息,當(dāng)該消息到達(dá)時進(jìn)行依次分發(fā),所以這里無論是內(nèi)存大小還是性能都會比接口直接調(diào)用消耗更多。
接口每個方法都有各自不同的明確的參數(shù)定義, 消息的話因為要求所有消息參數(shù)一致,所以會導(dǎo)致參數(shù)含義不明確,內(nèi)部保存的指針需要強制轉(zhuǎn)換才能使用。
"客戶端小規(guī)模應(yīng)用";是相對“大規(guī)模Server集群”, 其實我們要做的東西本身也挺大挺復(fù)雜,好幾十人同時開發(fā)。
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: 理解程序內(nèi)存 Richard Wei 2012-09-20 19:25
@春秋十二月
沒看過windows高級調(diào)試一書, 但是感覺比較經(jīng)典的書是<<軟件調(diào)試>>
re: API Hook在TA中的應(yīng)用 Richard Wei 2012-09-19 19:14
@birdhsy
不好意思,因為是公司代碼,所以不好外傳
re: QQ截圖時窗口自動識別的原理 Richard Wei 2012-09-06 12:47