日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

金山卫士UI原理解析(2)CBkWindow

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 金山卫士UI原理解析(2)CBkWindow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

一.CBkWindow

CBkWindow相當于傳統win32的窗體類,但并非每個窗體有一句柄,而是把把一個HWND當作一個容器

同時其還包含一個BkWnds,BkWnds是一個單例類,其包含多個CBkWindow

CBkWindow繼承自CBkObject

1.共有屬性

BKWIN_DECLARE_ATTRIBUTES_BEGIN()BKWIN_STYLE_ATTRIBUTE("class", m_style, TRUE)BKWIN_INT_ATTRIBUTE("id", m_uCmdID, FALSE)//, 0)BKWIN_COLOR_ATTRIBUTE("crbg", m_style.m_crBg, FALSE)BKWIN_COLOR_ATTRIBUTE("crtext", m_style.m_crText, FALSE)BKWIN_FONT_ATTRIBUTE("font", m_style.m_ftText, FALSE)BKWIN_TSTRING_ATTRIBUTE("href", m_strLinkUrl, FALSE)BKWIN_TSTRING_ATTRIBUTE("tip", m_strToolTipText, FALSE)BKWIN_ENUM_ATTRIBUTE("valign", UINT, TRUE)BKWIN_ENUM_VALUE("top", VAlign_Top)BKWIN_ENUM_VALUE("middle", VAlign_Middle)BKWIN_ENUM_VALUE("bottom", VAlign_Bottom)BKWIN_ENUM_END(m_uVAlign)BKWIN_ENUM_ATTRIBUTE("align", UINT, TRUE)BKWIN_ENUM_VALUE("left", Align_Left)BKWIN_ENUM_VALUE("center", Align_Center)BKWIN_ENUM_VALUE("right", Align_Right)BKWIN_ENUM_END(m_uHAlign)BKWIN_CUSTOM_ATTRIBUTE("pos", OnAttributePosChange)BKWIN_INT_ATTRIBUTE("transparent", m_bTransparent, FALSE)//, 0) BKWIN_DECLARE_ATTRIBUTES_END()

2.必要的消息

為重繪和控件定位等做準備

BKWIN_BEGIN_MSG_MAP()MSG_WM_CREATE(OnCreate)MSG_WM_PAINT(OnPaint)MSG_WM_DESTROY(OnDestroy)MSG_WM_WINDOWPOSCHANGED(OnWindowPosChanged)MSG_WM_NCCALCSIZE(OnNcCalcSize)MSG_WM_SHOWWINDOW(OnShowWindow) BKWIN_END_MSG_MAP_BASE()

3.Load方法

其會解析每個xml的節點,并初始化CBkWindow的數據

4.OnPaint

BeforePaint用于獲取style的樣式

AfterPaint用于恢復原先樣式信息.

BkStyle類定義了樣式信息

void BeforePaint(CDCHandle &dc, BkDCPaint &BkDC) {HFONT /*hftOld = NULL, */hftDraw = NULL;COLORREF /*crOld = CLR_INVALID, crOldBg = CLR_INVALID, */crDraw = CLR_INVALID;/*int nOldBkMode = OPAQUE;*/BkDC.rcClient = m_rcWindow;BkDC.rcClient.DeflateRect(m_style.m_nMarginX, m_style.m_nMarginY);if (!m_style.m_strSkinName.IsEmpty()){BkDC.bBkModeChanged = TRUE;BkDC.nOldBkMode = dc.SetBkMode(TRANSPARENT);}if (CLR_INVALID != m_style.m_crBg){BkDC.bBgColorChanged = TRUE;BkDC.crOldBg = dc.SetBkColor(m_style.m_crBg);}if (m_style.m_ftText)hftDraw = m_style.m_ftText;if (m_style.m_crText != CLR_INVALID)crDraw = m_style.m_crText;if (IsDisabled(TRUE)/*BkWndState_Disable == (GetState() & BkWndState_Disable)*/){if (m_style.m_crDisabledText != CLR_INVALID)crDraw = m_style.m_crDisabledText;}else if (BkWndState_Hover == (GetState() & BkWndState_Hover)){if (m_style.m_ftHover)hftDraw = m_style.m_ftHover;if (m_style.m_crHoverText != CLR_INVALID)crDraw = m_style.m_crHoverText;}if (hftDraw){BkDC.bFontChanged = TRUE;BkDC.hftOld = dc.SelectFont(hftDraw);}if (crDraw != CLR_INVALID){BkDC.bTextColorChanged = TRUE;BkDC.crOld = dc.SetTextColor(crDraw);} }void AfterPaint(CDCHandle &dc, BkDCPaint &BkDC) {if (BkDC.bFontChanged)dc.SelectFont(BkDC.hftOld);if (BkDC.bTextColorChanged)dc.SetTextColor(BkDC.crOld);if (BkDC.bBkModeChanged)dc.SetBkMode(BkDC.nOldBkMode);if (BkDC.bBgColorChanged)dc.SetBkColor(BkDC.crOldBg); }// Draw inner text default void OnPaint(CDCHandle dc) {BkDCPaint BkDC;BeforePaint(dc, BkDC);dc.DrawText(m_strInnerText, m_strInnerText.GetLength(), BkDC.rcClient, m_style.m_nTextAlign);AfterPaint(dc, BkDC); }

二.BkStyle

同skin一樣,也是從xml載入資源

<style> <class name=mainhead skin=mainbghead font=0000 crtext=000000 crbg=FBFCFD/> <class name=mainbody skin=mainbgbody font=0000 crtext=FFFFFF crbg=FBFCFD x-margin=7/> <class name=mainfoot skin=mainbgfoot font=0000 crtext=000000 crbg=FBFCFD x-margin=10 y-margin=1/> <class name=msgboxhead skin=msgboxhead font=0000 crtext=000000 crbg=FBFCFD/> <class name=msgboxbody skin=msgboxbody font=0000 crtext=000000 crbg=FBFCFD/> <class name=msgboxfoot skin=msgboxfoot font=0000 crtext=000000 crbg=FBFCFD/> <class name=dlgbody skin=dlgbody font=0000 crtext=000000 crbg=FBFCFD/> <class name=dlgfoot skin=dlgfoot font=0000 crtext=000000 crbg=FBFCFD/> <class name=linktext font=0002 hoverfont=0002 crtext=3064A5 crhover=FF0000 cursor=hand/> <class name=linktext2 crtext=3064A5 crhover=FF0000 cursor=hand/> <class name=linktext3 font=0002 hoverfont=0002 crtext=0051E5 crhover=FF0000 cursor=hand/> … </style>

轉載于:https://www.cnblogs.com/Clingingboy/archive/2011/08/15/2139881.html

總結

以上是生活随笔為你收集整理的金山卫士UI原理解析(2)CBkWindow的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰免费在 | 国产稀缺真实呦乱在线 | 国产调教视频在线观看 | 99思思| 成人看片 | 黄色xxxxx | av网站在线观看不卡 | 美味的客房沙龙服务 | 日本高清不卡在线 | 国产精品乱码久久久久久久久 | 欧美在线播放一区二区 | 精品人妻无码一区二区三区换脸 | 一区二区免费在线观看 | 青青青视频在线 | 美女网站免费观看视频 | 欧美 日韩 国产 在线 | 国产精品伦理 | 91网页入口 | 欧美日韩一区在线播放 | 奇米色影视 | 草草国产| 成人乱码一区二区三区av | 国产精品一区二区入口九绯色 | 91九色论坛 | 亚洲免费婷婷 | www污污 | 91在线精品秘密一区二区 | 中文字幕五码 | 国产看黄网站 | 国产人妻久久精品一区二区三区 | 欧美激情影音先锋 | 欧美日韩高清一区 | 国产欧美亚洲一区 | 国产一卡二卡三卡 | 欧美极品视频在线观看 | 日本三级网站在线观看 | 朝桐光一区二区三区 | a级在线看 | 亚洲色图第三页 | 国产一区二区三区视频在线观看 | 精品一区二区久久久 | 午夜在线免费观看 | 一区二区高清视频 | 久精品视频 | 精品成人国产 | 禁欲天堂 | 99爱在线视频| 久久av网 | 午夜在线视频播放 | 欧美18一20男同69gay | 黄色第一网站 | 亚洲www.| 日韩免费高清一区二区 | 成人一区二区三区在线 | 波多野结衣视频免费看 | 黄色网址最新 | 亚洲黄色免费 | 亚洲色图久久 | 强公把我次次高潮hd | 亚洲不卡影院 | 男人天堂a| 日韩精品一区二区三区中文在线 | 色婷婷一区二区 | 天天干视频| 女性女同性aⅴ免费观女性恋 | 日韩成人激情视频 | 香蕉国产在线观看 | 久久合合| 久久久久久免费 | 国模私拍视频在线 | 五十路av在线| 91在线高清视频 | 青青青青青草 | 日韩成人在线播放 | 国产精品99无码一区二区视频 | 亚洲精品666| 无码精品在线视频 | 亚洲美女自拍偷拍 | 亚洲黄色第一页 | 又黄又爽视频在线观看 | 午夜va | 国产精品一区二区三区线羞羞网站 | 午夜羞羞网站 | 18无码粉嫩小泬无套在线观看 | 亚洲一区二区麻豆 | 久久青青国产 | 青青草99 | 国产成人一区在线观看 | 日韩成人在线看 | 国产三级按摩推拿按摩 | 毛片基地在线观看 | 91天天操| 欧美精品播放 | 黄色特级毛片 | 蛇女欲潮性三级 | 中文字幕av久久爽 | 欧美日韩图片 | 美女扒开尿口让男人捅爽 | 亚洲日本中文 |