現在游戲的UI五花八門,什么需求都有,特別是涉及到充值那塊,對內嵌網頁要求就更多。
那么怎么實現一個UI里的內嵌網頁呢?這個網頁還要跟著這個UI移動。
關于內嵌網頁,網上已經有不少介紹,就是利用CAxWindow,在這里我就不多介紹了,大家可以百度一下這個控件。
如果要在游戲UI中顯示網頁,那把CAxWindow作為游戲主窗口的子窗口(WM_CHILD)創建并設置到相應的位置即可。
至于它要跟著游戲UI移動,這些也是消息響應的問題,在這里也不多說了。
最關鍵的是,這個窗口要不被游戲內容擋著,又不占整個屏幕,那要如何弄呢?
其實答案很簡單,但要對win32比較熟悉,只需要把windowstyle設置成WS_CLIPCHILDREN就可以了。
我的做法是:一但開啟這種窗口
執行:
LONG dwWindowStyle = ::GetWindowLong(主窗口);
dwWindowStyle |= WS_CLIPCHILDREN;
::SetWindowLongW(主窗口, GWL_STYLE, dwWindowStyle);
這樣可以保持原來窗口樣式不變。
但網頁內嵌到游戲UI有個缺點:就是這種UI一定要排在最前面,因為顯示網頁的窗口是不會被其他東西擋著的。
補充:遇到一個非常奇怪的問題,在release版本下,當內嵌網頁窗口拖動的時候,網頁有部分像素沒被刷新,但debug卻一點問題也沒有。
這個問題到現在還沒查出具體原因。解決方法如下:
在這個窗口的拖動過程中添加如下函數,
::RedrawWindow(m_hWnd, NULL, NULL, RDW_INVALIDATE| RDW_UPDATENOW | RDW_ERASE | RDW_ALLCHILDREN); m_hWnd是CAxWindow的窗口句柄。