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