標籤:閃爍 children 網上 商業 ipc 問題 取消 邊框 程式員
其實剛開始用wpf寫launcher的原因也就是因為用mfc寫介面非常的麻煩,尤其是對於我這種後端轉前端的程式員來說。在寫這個launcher之前我連對話方塊單文檔多文檔有什麼區別都不知道。而現在的介面不像是以前,現在的介面都是各種異形,要求做得非常漂亮的。當然你會說有直接的介面庫可以用,但是在網上找了一圈之後發現很多的介面庫都是從好幾年前就沒有再維護了,要麼就是商業版的,簡而言之要錢。我們老大看我直接硬寫介面的時候也跟我說你用介面庫啊,然後幫我找了一圈,我還默默的期待了一下能夠有什麼好的辦法,後來跟我說他也沒什麼好辦法還是硬寫吧。。。。。。
說實話現在用mfc來寫介面的人估計真的很少了,mfc大牛們不算,一般的遊戲開發估計不會用mfc來寫吧,能夠在網上找到的最近的資料都是已經四五年以前的了,然後我每天都在跟我們老大吐槽==、
好了不說廢話了進入正題。
異形視窗異形按鈕什麼的很多部落格都有寫,我也是從網上找的源碼修改的就不說了,說一些我遇到的問題的點吧。
1.自訂控制項類型的話是需要自己註冊系統訊息的,比如ON_WM_PAINT()什麼的要在messagemap裡註冊,不然的話自己重寫的OnPaint函數不會被執行。
2.視窗拖動的話整個視窗是需要重繪的,包括裡面所有的控制項。我用的是OnWindowPosChanged這個函數來標誌視窗移動了,因為mfc中並沒有mouseup這個訊息。如果視窗移動的話onpaint函數裡面加入控制項的重繪。但是像按鈕之類的控制項可以利用視窗切割的方式,也就是說把主視窗和控制項分割開來,在OnInitDialog()中加入ModifyStyle(0, WS_CLIPCHILDREN);這樣就避免了一直去重繪其中的控制項。但是像CStatic這樣的類是必須要重繪的無法分隔開。
3.避免閃爍的方式就是雙緩衝。這個對於我來說的話就是道理我都懂可是代碼上還是不太理解,cdc、hdc什麼的好想弄清楚。
wpf的介面就簡單的多,直接載入圖片就行了,button的不同狀態就是不同的圖片,mfc中我的做法是把不同狀態的圖片拼接在一起,然後根據不同狀態顯示不同的位置。wpf中需要注意的一點就是比如一個listbox,點擊的時候會出現邊框,或者按鈕點擊會出現閃爍,取消他的focus就行了。
微端遊戲啟動器LAUNCHER的製作MFC版之三(介面)