CSkinDialog

所属分类:对话框与窗口
开发工具:Visual C++
文件大小:299KB
下载次数:43
上传日期:2010-10-22 13:35:02
上 传 者yflibra
说明:  windows窗口界面换肤实现,采用C++编写,有一定参考价值。
(skin windows window interface implemented using C++ written in a certain reference value.)

文件列表:
CSkinDialog\CSkinDialog.aps (40060, 2007-02-24)
CSkinDialog\CSkinDialog.clw (2455, 2007-02-27)
CSkinDialog\CSkinDialog.cpp (2412, 2007-02-23)
CSkinDialog\CSkinDialog.dsp (5799, 2007-02-15)
CSkinDialog\CSkinDialog.dsw (545, 2005-01-27)
CSkinDialog\CSkinDialog.exe (245760, 2007-02-27)
CSkinDialog\CSkinDialog.h (1409, 2005-01-27)
CSkinDialog\CSkinDialog.manifest (696, 2003-03-10)
CSkinDialog\CSkinDialog.opt (163328, 2007-02-27)
CSkinDialog\CSkinDialog.plg (2818, 2007-02-27)
CSkinDialog\CSkinDialog.rc (8716, 2007-02-24)
CSkinDialog\CSkinDialog.sln (886, 2006-09-08)
CSkinDialog\CSkinDialog.suo (52736, 2009-01-14)
CSkinDialog\CSkinDialog.vcproj (11816, 2006-09-08)
CSkinDialog\CSkinDialog.vcproj.FAN.fan.user (1403, 2009-01-14)
CSkinDialog\CSkinDialogDlg.cpp (9256, 2007-02-27)
CSkinDialog\CSkinDialogDlg.h (1920, 2007-02-15)
CSkinDialog\res\Blue Lace 16.bmp (1270, 2007-02-15)
CSkinDialog\res\CSkinDialog.ico (1078, 2005-01-27)
CSkinDialog\res\CSkinDialog.rc2 (403, 2005-01-27)
CSkinDialog\res\Thumbs.db (3584, 2005-01-30)
CSkinDialog\resource.h (1838, 2007-02-15)
CSkinDialog\skin\Thumbs.db (76800, 2007-02-14)
CSkinDialog\skin\Vista3\button.bmp (8454, 2007-02-23)
CSkinDialog\skin\Vista3\CHECKBOX.bmp (6294, 2007-02-23)
CSkinDialog\skin\Vista3\CLOSE.BMP (16952, 2007-02-23)
CSkinDialog\skin\Vista3\Framebottom.bmp (9656, 2007-02-23)
CSkinDialog\skin\Vista3\framecaption.bmp (54712, 2007-02-23)
CSkinDialog\skin\Vista3\Frameleft.bmp (2456, 2007-02-23)
CSkinDialog\skin\Vista3\Frameright.bmp (2456, 2007-02-23)
CSkinDialog\skin\Vista3\GroupBox.bmp (1558, 2007-02-23)
CSkinDialog\skin\Vista3\HELP.BMP (10808, 2007-02-23)
CSkinDialog\skin\Vista3\MAX.BMP (10296, 2007-02-23)
CSkinDialog\skin\Vista3\MIN.BMP (10808, 2007-02-23)
CSkinDialog\skin\Vista3\RADIOBOX.bmp (4214, 2007-02-23)
CSkinDialog\skin\Vista3\Restore.BMP (10296, 2007-02-23)
CSkinDialog\skin\Vista3\theme.ini (518, 2007-02-23)
CSkinDialog\SkinWin\BitmapEx.cpp (13736, 2005-01-25)
CSkinDialog\SkinWin\BitmapEx.h (2958, 2005-01-31)
... ...

软件换肤的示例 本示例开放源代码,望更多高手完善。有问题请EMail : congpt@163.com 代码实现: 首先使用钩子SetWindowsHookEx钩需要换肤窗口的消息(WH_CALLWNDPROC),然后用自己的消息循环替换原有的消息循环。 最麻烦的就是主窗口、对话框等。主要需要HOOK以下消息: WM_MOUSEMOVE: 鼠标消息 WM_MOUSEHOVER: 鼠标消息 WM_MOUSELEAVE: 鼠标消息 WM_SHOWWINDOW: 显示窗口,由于皮肤的标题栏高过系统的标题栏高度,就在显示窗口时改变窗口的尺寸 WM_DESTROY: 释放皮肤的资源 WM_NCPAINT: 重画非客户区 WM_NCCALCSIZE: 计算非客户区的尺寸 WM_NCHITTEST: 返回非客户区的鼠标指令代码,例如HTCLOSE就是非客户区的关闭按钮,鼠标消息根据此代码来响应 WM_NCLBUTTONDOWN: 非客户区的鼠标左键按下时响应此消息 WM_NCLBUTTONUP: 非客户区的鼠标左键放开时响应此消息 WM_NCRBUTTONUP: 非客户区的鼠标右键放开时响应此消息 WM_NCMOUSEMOVE: 非客户区的鼠标移动时响应此消息 WM_SIZE: 窗口尺寸改变后响应 由于对非客户区的鼠标消息很多,要HOOK所有的消息太麻烦,所以就在HOOK后,去掉了窗口的WS_CAPTION风格,如果不去掉这个风格,我想需要HOOK以下消息,没有具体实现: WM_SETCURSOR WM_INITMENU WM_INITMENUPOPUP WM_WINDOWPOSCHANGED WM_WINDOWPOSCHANGING WM_ENTERMENULOOP 还要修改WM_MOUSEMOVE、WM_NCLBUTTONDOWN、WM_NCRBUTTONDOWN等鼠标消息。 本示例只实现了部分控件的换肤,其他控件根据HOOK思路应该都可以实现,当然最麻烦的要属滚动条了; ListCtrl的滚动条我想可以HOOK非客户区的鼠标消息、键盘消息和WM_NCPAINT来实现,就是要自己画,不用其他窗口替代,只要计算出滚动条2个按钮和滑块的位置,我想应该可以实现的,下面是位置的计算代码: //m_GameList是一个ListCtrl CString str; SCROLLINFO si; m_GameList.GetScrollInfo(SB_VERT,&si); CRect rect; m_GameList.GetClientRect(rect); //l就是滑块的高度 int l=(rect.bottom-rect.top-2*::GetSystemMetrics(SM_CXVSCROLL))*si.nPage/(si.nMax+1); CDC *dc=m_GameList.GetWindowDC(); int nBorderX=0,nBorderY=0; if(m_GameList.GetExStyle()&WS_EX_CLIENTEDGE) { nBorderX=::GetSystemMetrics(SM_CXEDGE); nBorderY=::GetSystemMetrics(SM_CYEDGE); } CRect rc; //上箭头按钮 rc.left=rect.right+nBorderX; rc.top=rect.top+nBorderY; rc.right=rc.left+::GetSystemMetrics(SM_CXVSCROLL); rc.bottom=rc.top+::GetSystemMetrics(SM_CYVSCROLL); CBrush brush(RGB(255,0,0)); dc->FillRect(&rc,&brush); brush.DeleteObject(); //滚动条滑块区域 rc.left=rect.right+nBorderX; rc.top=rect.top+nBorderY+::GetSystemMetrics(SM_CYVSCROLL); rc.right=rc.left+::GetSystemMetrics(SM_CXVSCROLL); rc.bottom=rect.bottom+nBorderY-::GetSystemMetrics(SM_CYVSCROLL); CBrush brush1(RGB(22,222,22)); dc->FillRect(&rc,&brush1); brush1.DeleteObject(); //下箭头按钮 rc.left=rect.right+nBorderX; rc.top=rect.bottom+nBorderY-::GetSystemMetrics(SM_CYVSCROLL); rc.right=rc.left+::GetSystemMetrics(SM_CXVSCROLL); rc.bottom=rc.top+::GetSystemMetrics(SM_CYVSCROLL); CBrush brush2(RGB(255,0,0)); dc->FillRect(&rc,&brush2); brush2.DeleteObject(); 这个代码是去年写的,今天找出来看很不完善,希望高手们完善代码,免费供大家使用! 丛培涛 2007年2月27日

近期下载者

相关文件


收藏者