博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SkinMagic库界面美化
阅读量:5880 次
发布时间:2019-06-19

本文共 6571 字,大约阅读时间需要 21 分钟。

hot3.png

[准备工作]
  1、将SkinMagicTrial.dll放置在调试目录
  2、设置库文件目录,在项目[连接器]的[附加依赖项]中加入库SkinMagicTrial.lib
  3、在项目的stdafx.h文件中加入头文件 #i nclude "SkinMagicLib.h"
  [创建过程]
 
 1、初始化SkinMagic库:
  要使用SkinMagic,这一步必不可少。在应用程序类的InitInstance()函数中行加入如下代码(粗体部分):
  CWinApp::InitInstance();
  VERIFY( 1 == InitSkinMagicLib(AfxGetInstanceHandle(), NULL , 
  NULL, NULL ));
  说明:
  int InitSkinMagicLib( //初始化SkinMagic工具库
  HINSTANCE hInstance, //应用程序句柄
  char* szApplication , //皮肤文件中定义的应用程序名,置为NULL即可
  char* szRegCode, //SkinMagic的使用注册码。若无置为NULL
  char* szReserved2 //保留位,为NULL
  );
  
2、调入皮肤文件:
  皮肤的调用有两种方法,一是直接从皮肤文件中调用,另一种方法是从资源文件中调用,分别说明如下:
  1)从皮肤文件中调用皮肤:紧接上句,加入如下代码
  VERIFY( 1 == LoadSkinFile("corona.smf"));
  2)从资源文件中调用皮肤:
  VERIFY(1 == LoadSkinFromResource(NULL,"FUTURA","skin"));
  说明: int LoadSkinFromResource(
  HMODULE hModule, //包含皮肤文件的模块句柄,若NULL表面在本模块中
 char* lpSkinName , //皮肤资源的名称
  char* lpType); //资源的类型
  3、为窗口添加皮肤:
  1)为标准窗口(拥有标题栏、系统菜单、可变大小等特征,比如文档/视图结构和有菜单的对话框)添加皮肤,通常用于主窗口。在应用程序类的InitInstance()函数的底部加入如下代码:
  VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "Main" ));
  m_pMainWnd->ShowWindow(SW_SHOW);
  m_pMainWnd->UpdateWindow();
  
说明:
  int SetWindowSkin(
  HWND hWnd, //要使用皮肤的窗口句柄
  char* lpSkinName //为skinWnd对象指定的名称
  );
  2)为对话框添加皮肤
  在对话框显示之前调用,通常在应用程序初始化函数中调用
  VERIFY( 1 == SetWindowSkin( m_pMainWnd->m_hWnd , "Main" ));
  VERIFY( 1 == SetDialogSkin( "Dialog" ) );
  m_pMainWnd->ShowWindow(SW_SHOW);
  m_pMainWnd->UpdateWindow();
  说明:
  int SetDialogSkin( 
  char* lpSkinName //为skinWnd对象指定的名称
  );
  使用该函数后,以后程序创建的对话框都将使用该皮肤,但对话框大小不可变。
 3)为单个对话框窗口添加皮肤,例如在对话框视图中:重载对话框视图的创建函数OnCreate,加入如下代码:
  VERIFY( 1 == SetSingleDialogSkin( m_hWnd, "Dialog" ) );
  EnableWindowScrollbarSkin( m_hWnd , SB_BOTH );
  说明:
  int SetSingleDialogSkin(
  HWND hWnd, //要使用皮肤的窗口句柄
  char* lpSkinName //为skinWnd对象指定的名称
  );
  int EnableWindowScrollbarSkin( //为滚动条添加皮肤
  HWND hWnd, //要使用皮肤的窗口句柄
  int* fnBar //要使用皮肤的滚动条,SB_BOTH表明是横竖都是用皮肤
  );
  4、释放SkinMagic资源
  
  重载应用程序的ExitInstance()函数,添加如下代码:
  ExitSkinMagicLib();
==============================================================================================
Q:如何在对话框中加入工具条在 OnInitDialog 中加入下面代码:
BOOL CYourDlg::OnInitDialog()            {            CDialog::OnInitDialog();            // Create the toolbar. To understand the meaning of the styles used, you            // can take a look at the MSDN for the Create  of the CToolBar class.            ToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS |CBRS_FLYBY | CBRS_BORDER_BOTTOM);            // I have assumed that you have named your toolbar''s resource as IDR_TOOLBAR1.            // If you have given it a different name, change the line below to accomodate            // that by changing the parameter for the LoadToolBar .            ToolBar.LoadToolBar(IDR_TOOLBAR1);            CRect rcClientStart;            CRect rcClientNow;            GetClientRect(rcClientStart);            // To reposition and resize the control bar            RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST,0, reposQuery, rcClientNow);            CPoint ptOffset(rcClientNow.left - rcClientStart.left,rcClientNow.top-rcClientStart.top);            CRect rcChild;            CWnd* pwndChild = GetWindow(GW_CHILD);            while (pwndChild)            {            pwndChild->GetWindowRect(rcChild);            ScreenToClient(rcChild);            rcChild.OffsetRect(ptOffset);            pwndChild->MoveWindow(rcChild, FALSE);            pwndChild = pwndChild->GetNextWindow();            }            CRect rcWindow;            GetWindowRect(rcWindow);            rcright += rcClientStart.Width() - rcClientNow.Width();            rcbottom += rcClientStart.Height() - rcClientNow.Height();            MoveWindow(rcWindow, FALSE);            // And position the control bars            RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);            return TRUE;  // return TRUE  unless you set the focus to a control            }
==============================================================================================
Q:如何改变对话框的形状? 可用下面一些函数:             CreatePolygonRgn            CreateRectRgn            CreateRoundRectRgn 等.
CRgn m_rgn;  // Put this in your dialog''s header file. i.e. a member variable            // This Gets the size of the Dialog: This piece of code is to be placed in the            // OnInitDialog  of your dialog.            CRect rcDialog            GetClientRect(rcDialog);            // The following code Creates the area and assigns it to your Dialog            m_rgn.CreateEllipticRgn(0, 0, rcDialog.Width(), rcDialogHeight());            SetWindowRgn(GetSafeHwnd(), (HRGN) m_rgn, TRUE);
Q:如何实现非客户区移动?
可用下面二种方法
// Handler for WM_LBUTTONDOWN message            void CYourDialog::OnLButtonDown(UINT nFlags, CPoint point)            {            CDialog::OnLButtonDown(nFlags, point);            PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));            }            // Handler for WM_NCHITTEST message            LONG CYourDialog::OnNcHitTest( UINT uParam, LONG lParam )            {            int xPos = LOWORD(lParam);            int yPos = HIWORD(lParam);            UINT nHitTest = CDialog::OnNcHitTest(CSize(xPos, yPos));            return (nHitTest == HTCLIENT) ? HTCAPTION : nHitTest;            }
Q:如何使对话框初始为最小化状态?
在 OnInitDialog 中加入下面代码:
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, NULL);
Q:如何限定对话框大小范围?
在 WM_SIZING中加入下面代码:
void CYourDialog::OnSizing(UINT fwSide, LPRECT pRect)            {            if(pRect->right - pRect->left <=200)            pRect->right = pRect->left + 200;            if(pRect->bottom - pRect->top <=200)            pRect->bottom = pRect->top + 200;            CDialog::OnSizing(fwSide, pRect);            }
Q:如何在对话框中加入状态条?
定义 CStatusBar 变量:
CStatusBar m_StatusBar;
定义状态条指定状态:
static UINT BASED_CODE indicators[] =            {            ID_INDICATOR_CAPS,            ID_INDICATOR_NUM            };
在 OnInitDialog 中加入下面代码:
m_StatusBar.CreateEx(this,SBT_TOOLTIPS,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,AFX_IDW_STATUS_BAR);            // Set the indicators namely caps and nums lock status            m_StatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT));            CRect rect;            GetClientRect(&rect);            m_StatusBar.SetPaneInfo(0,ID_INDICATOR_CAPS,SBPS_NORMAL,rect.Width()/2);            m_StatusBar.SetPaneInfo(1,ID_INDICATOR_NUM,SBPS_STRETCH ,rect.Width()/2);            RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,ID_INDICATOR_NUM);            m_StatusBar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));
 
 

4、释放SkinMagic资源

重载应用程序的ExitInstance()函数,添加如下代码:

ExitSkinMagicLib();

转载于:https://my.oschina.net/laopiao/blog/92351

你可能感兴趣的文章
Microsoft Speech Platform
查看>>
jQuery和JavaScript获取父级以上元素的写法
查看>>
我的友情链接
查看>>
SlidesJS基本使用方法_已整理
查看>>
10g数据导入9i数据库方法实现
查看>>
jquery时间轴特效例子搜集下载
查看>>
我的友情链接
查看>>
解决MySQL远程登录时出现ERROR 1130错误问题
查看>>
powershell 学习------hpyer-v 虚拟机优化(自动备份,压缩磁盘)
查看>>
CentOS 7安装部署Rsync数据同步服务器
查看>>
ubuntu文件名中文乱码
查看>>
观《五星大饭店》有感
查看>>
右键 open with sublime
查看>>
VMWare Workstation 虚拟机NAT网络
查看>>
java常用工具——jhat
查看>>
深刻理解Linux进程间通信(IPC)
查看>>
老男孩最近几年常用的免费的开源软件
查看>>
计算字符串中回文子串的个数 Palindromic Substrings
查看>>
Python脚本通过邮件发送zabbix报警图片
查看>>
java线上服务故障分析笔记
查看>>