让你的软件界面更漂亮Word格式文档下载.docx
- 文档编号:7193727
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:24
- 大小:317.37KB
让你的软件界面更漂亮Word格式文档下载.docx
《让你的软件界面更漂亮Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《让你的软件界面更漂亮Word格式文档下载.docx(24页珍藏版)》请在冰点文库上搜索。
{
CDC*pDC=GetWindowDC();
CBitmap*pBitmap=newCBitmap;
CRectrtWnd,rtButton;
if(pDC)
{
CStringStrTemp="
"
;
GetWindowRect(&
rtWnd);
."
pDC->
TextOut(30,10,m_StrTitle);
}
pDC->
SetBkMode(nOldMode);
SetTextColor(clOldText);
SelectObject(OldFont);
息函数要手动添加。
只本程序是在VC+++WinXP环境下完成的。
经过实践证明,仅仅画一个窗口很容易,多窗口程序软件实现统一风格很难。
如若有机会的话,我会和大家继续探讨如何将设计好的漂亮窗口子类化,让程序所有的窗口有统一风格,美化窗口的其它控件并可自动随窗口改变而调整大小。
我想那才是我们大家关心的。
对不
本人的联系
让你的软件界面更漂亮
(2)
一、统一风格漂亮界面设计的理论与实现
a.窗口和对话框
Windows操作系中窗口和对话框在我们看来是一样的,就是一个四边形,有标题栏、系统按钮,边框等,可移动和可变大小。
实际上窗口和对话框是有的区别的。
在创建对话框窗口时的工作中要发生两个主要过程:
对话框的过程和其窗口过程。
Win32SDK对话框使用了系统提供的对话框窗口的窗口过程和对话框过程,对话框过程将被窗口过程调用。
在MFC下,所有的窗口类都使用了同一个窗口过程,对话框类也一样。
MFC对话框过程只处理WM_INITDIALOG消息,其余都让窗口过程处理,我们只能在函数OnInitDialog()中有唯一机会处理我们的对话框的初始化工作。
因而我们设计界面时要在窗口过程处理中相关消息实现我们的界面。
b.几个有关对话框窗口消息的处理
1.WM_NCPAINT:
重画非客户区消息
重载此消函数,可以标题栏上为所欲为。
2.WM_NCLBUTTONDOWN:
在非客户区上按下鼠标左键消息
要想在标题栏相应鼠标左键,可重载此消函数
3.WM_NCMOUSEMOVE:
在非客户区上移动鼠标会产生此消息
4.WM_SIZE:
在窗口改变大小后产生此消息。
为了使软件更专业,调整对放框大小时,里面的各控件也应合理调整位置和大小,
重载此消函数可实现目的。
还有很几个,其它的不介绍了。
c.统一的界面风格实现
如何运用上述知识请参考我的前一文《让你的软件界面更漂亮
(一)》中有介绍并有源程序。
漂亮界面的统一风格是如何实现的将是本文要讨论主要内容。
我们知道Windows操作系统窗口风格基本上是一致的,微软的应用软件程序也和操作系统风格基本是统一的。
所以使我们的CDialog也跟其一样,要改变它的界面风格很困难。
除非你对MFC了如指掌,甚至要了解操作系统内核。
本人在摸索过程中经过无数次碰壁后,终于找到了希望。
请看下面两幅图:
图一
图二
看了上面两图你是不是对VC有信心了VisualC++可实现你想要的统一风格界面。
请看如何实现:
1.首先要建立漂亮界面主窗口。
它也是一个对话框,方法前文有介绍。
2.处理漂亮界面主窗口的OnInitDialog()函数。
很重要!
!
BOOLCTitleBarDlg:
OnInitDialog()
改基类CDialog为漂亮界面类(CtitleBarDlg)
内的CDialog都要改,用Edit/Replace功能快些且安全。
在还要包括
注意:
对话框构造函数第一个参数CtitleBarDlgnID要删除。
否则通Build通不过。
5.显示你的窗口
完成编译运行。
你的对话框的风格是不是和主窗口一样,有没显示出来
二.说明
统一风格的漂亮界面基本达到了目的。
但同样也存在几个问题:
1.漂亮界面界必须是主窗口。
我还没有想出方法能让它独立出来。
2.显示其它子窗口只能是非模式对话框窗口方式。
我尝试DoModal显示但没有成功。
但我分析MFC后找到了笨方法,MFC也是这么做。
3.基于述原因,我建立了统一的界面风格的开发模板,只有在此模板上开发就能实现软件漂亮统一的界面风格。
需要可和我联系!
若有机会我会和大家继续探讨漂亮界面的实现的其它难点。
让你的软件界面更漂亮(3)
本文示例源代码或素材下载
实现令人满意的风格统一的软件界面确实很难, 象网友提到的MessageBox、FileDialog、FontDialog、目录选择对话框等MFC内部甚至系统DLL内的对话框,要想让它变脸可不容易。
有人说HOOK技术可以,HOOK技术确实可以,HOOK可以说是无孔不入,但HOOK的使用效率却是令人难以满意的,从目前大多数采HOOK技术的换肤软件使用情况来看,完全可以证明这一点。
今天我们将讨论另外一技术来实现FileDialog的变脸,这种技术叫替换窗口过程法(注:
本人杜撰)。
窗口过程函数是大多窗口都有的,它处理窗口中(包括子窗口)的每一个事件,替换窗口过程法与HOOK技术比起来孰强誰弱是很显然的,因为同一个HOOK只能拦截一个事件,处理起来相当费时,HOOK也有它的优势,但不是本文要讨论的。
这里先让大家眼见为实,请看下图:
一、原理说明:
替换对话框的窗口过程要用到这个函数SetWindowLong()其原型如下:
LONGSetWindowLong(HWNDhWnd,intnIndex, longdwLongNewProc)
hWnd为指定窗口的句柄,
nIndex 为GWL_WNDPROC时才可设定新的窗口过程
dwLongNewProc 为指定新的窗口过程函数地址
反回值为一个long的数值,此值为旧的窗口过程函数地址。
如果要替换某个窗口的窗口过程函数,首先要想法弄到它的窗口的句柄,当然还得有窗口过程。
二、CFileDialog文件对话框界面设计
a.从CFileDialog派生类CMyFileDialog;
b.添加Protected型虚成员函数:
OnInitDone();
此函是实际上是CFileDialog一个虚函数,它在文件对话框创后建后被调用,它给我们留下了一个入口,因些重载现实替换其窗口过程函数;
c.添加成员函数MyWindowProcNew()
staticLRESULTCALLBACKWindowProcNew(HWNDhwnd,
UINTmessage,
WPARAMwParam,
LPARAMlParam);
在这函数实现的时候你可大显身手,处理得好不好决定你是否能变脸成功。
d.实现代码及说明如下:
WNDPROCm_MyWndProc;
把.lib.dll.h文件持拷到工程目录。
在要使用处加如代码:
#include"
#pragamcomment(lib,"
)
b.显示文件对话框:
CMyFileDialogMyFileDlg(TRUE,1,_T("
对话框标题"
));
();
CString FileName=()
FileName是反回的结果
c.CMyFileDialog有一个超值的功能,不知有没有从上图看出来它能够用来代替SHBrowseForFoler作为目录选择对话框。
这也是我写CMyFileDialog的初终。
构造函数第一个参数和CfileDialg一样,第二个参数为TRUE时可作为目录选择对话框,此时第一个参数可BOOL的任意值建议设为TRUE,第三个参数为对话框标题,如为NULL则显示默认标题,其它参数和CFileDialog一样。
作者:
朱一松
责编:
豆豆技术应用
让你的软件界面更漂亮(4)
漂亮界面的软件应该有漂亮的菜单,大家对WindowsXP的开始菜单肯定不陌生吧,那种菜单独具风格。
于是去研究了一下,发现其实它并不是真CMenu也不是其派生类,分析其结构发现其主要是两个ListView、一个ToolBar、一个Button组成的。
于是也写了个菜单类,但我并没有用ListView去实现,虽然不敢和WindowsXP相比,但我认为其是一种有个性的菜单,拿出和大家分享!
希望大家能写出有创新和自主产权的菜单。
哈哈……。
当然要先眼见为实如下图。
一、实现原理
用CWnd和CButton来实现。
主要的类文件为Cyisong。
二、菜单使用方法说明
类public变量定义:
CYisongMenum_GroupMenu;
CYisongMenum_SubGroupMenu;
ShowMenuPos(x,y,LEFTBOTTOM);
第三个数指定(x,y)为菜单的四个角点中的一个。
如LEFTBOTTOM即为菜单左下角处在(x,y)的位置。
响映菜单项命令
在.cpp中添加:
ON_COMMAND_RANGE(IDC_SUBITEM,IDC_SUBITEMMAX,OnMenuCommand)中声明为:
voidOnMenuCommand(UINTnID)
在cpp中的函数实现代码为:
CStringStrSelect;
("
你选择了第%I功能"
nID-IDC_SUBITEM+1);
MessageBox(StrSelect,"
执行结果"
);
三、主要函数说明
原型:
voidSetMenuHeader(CStringStrTitle,UINTnID,BOOLbShowHead)
参数:
StrTitle:
头标题,nID:
图标ID,bShowHead:
如要显菜单头则为TRUE
AppendMenuItem(CStringStrTitle,intnID,intnIconID,CWnd*pSubMenu,
DWORDdwStyles,CStringstrTip)
StrTitle:
头标题,
nID:
菜单项ID,
nIconID:
图标ID,
pSubMenu:
如有子菜单 在C++环境实现,界面风格可实现自定义;
b.不仅适用Mouse操作,还支持响应方向按键,快捷键功能;
c.可增加和删除菜单中的子项;
d.可显示LeftBar并定义其风格;
e.可自定义焦点亮条的风格;
f.可设置菜单子项为CheckOption风格
2、完美类WindowXp开始菜单的用途:
a.可实现WindwXp的两种菜单,经典菜单和分组菜单,非常适在大型应软件。
象QQ的主菜单就是其中之一的分组菜单
b.托盘菜单、右键快捷菜单等应用。
一、编程指南
1.文件说明
类文件:
YisongStartMenu.lib(开始菜单库)
其它文件:
,,
2.CYisongStartMenu用法
a.先把上述文件拷贝到工程目录下
b.#include,只要把文件包括到工程文件中就OK
c.定义一变量:
CYisongStartMenum_StartMenu;
d.在.cpp文件中现实代码
(1,"
."
(2,"
….
(_T("
所有程序"
),IDR_MENU_TEST,0,
MENU_BOTTOM|MENU_POPUP,0,NULL,NULL,&
m_wndSubMenu);
AppendPlaceItem(_T("
MyDocuments"
),
ID_PLACELIST_MYDOCUMENT,0,MENU_DEFAULT,
IDI_ICON_MYDOCUMENT);
…..
m_StartMenu.AppendPlaceItem(….);
;
e.显示菜单方法
响应菜单菜单命令
在用AppendPlaceItem()或AppendProgItem()、AppendBottomItem()添加菜单子项时它们第二个参数为菜单项的ID。
在响应每个子项mouse单击事件时,会向菜单其父窗口发送WM_COMMAND消息,
SendMessage(m_hWndParent,WM_COMMAND,m_pCurrentItem->
uID,0)所以只要在主窗口为每个菜单项映谢消息ON_COMMAND的函数函行了,方法是在cpp文件中找到消息息映射处(在BEGIN_MESSAGE_MAP(CWindowsXPMenuDlg,
CDialog)和END_MESSAGE_MAP()之间)。
添加如下代码:
ON_COMMAND(ID_MENUITEM,OnFunc)
在.h头文件对OnFunc()函数声明为消息函数:
afx_msgvoidOnFunc();
在OnFunc()函数中实现菜单项的命令的功能
二.主要功能接口函数的说明
1.函数名:
AppendProgItem()
功能:
添加主程序功能菜单项
原型及参数说明:
voidAppendProgItem(LPCTSTRszItemName,
UINTuID,
ULONGulData,
UINTuFlags,
UINTuIconResID,
HICONhIcon=NULL,
LPCSTRszTooltip=_T("
CYisongStartMenu*pSubMenu=NULL);
szItemName:
菜单项文本标题
uID:
菜单项ID标识
ulData:
保留
uFlags:
菜单风格定义,其值可为下列值或组合
AppendProgItem(_T("
),0,0,MENU_SEPARATOR,0);
或AppendPlaceItem(_T("
与本功能相同用的函数还有AppendPlaceItem(),用法上完全一样。
2.函数名:
SetProgItemBackColor()
功能:
设置菜单列表背景颜色
voidSetProgItemBackColor(COLORREFclrLeftTop,
COLORREFclrRightBottom,
boolbValid)
clrLeftTop:
左上角的颜色
clrRightBottom:
右下角结束处颜色
bValid:
布尔型变量,TRUE,表示立即设置生效。
说明:
SetProgItemBackColor()函数的用法及功能与本函是一样的,请参照此用法。
3.函数名:
SetItemTextColor(ITEM_TYPEnType,COLORREFclrText)
设置菜单文本颜色
voidSetItemTextColor(ITEM_TYPEnType,COLORREFclrText)
nType:
ITEM_TYPE枚举类型的数参
enumITEM_TYPE
{
PROGLIST_TYPE,SetItemTextColor(PROGLIST_TYPE,RGB(255,0,0));
一般在菜单初始完成后调用该函数来设置菜单项的文本颜色。
4.函数名:
GetBottomBarBitmap()
设置菜单底部背景图象
voidGetBottomBarBitmap(intnMode,LPTSTRszFile))
nMode:
指出显示方式
szFile:
图像文件及路径。
与些函数功能相同的还有GetUserBitmap(intnMode,LPTSTRszFile)
5.函数名:
SetAsSubMenu()
设置菜单为弹出(子)菜单
voidSetAsSubMenu(BOOLbSubmenu)
bSubmenu=TRUE时,表示为弹出(子)菜单。
如上图的TEST菜单
6.函数名:
SetItemFoucsBitmap(ITEM_TYPEnType,LPTSTRstrFile)
设置菜单项的焦点高亮显示方式
voidSetItemFoucsBitmap(ITEM_TYPEnType,LPTSTRstrFile)
nType:
参考上面介始
strFile:
焦点高亮显示图形,为NULL则显示默认的高亮条
一般在菜单初始完成后调用该函数
可设定不同的焦点亮条风格,上图显示两种亮条不同风格的焦点亮条。
当亮条风格不能满足你的要求时,还可设定自已喜欢的图形作为焦点亮条。
对亮条图形任意尽寸大小都适合。
也可看到上图下拉菜单的LeftBar风格。
可以说,完美类WindowXp开始菜单是一款用C++实现的非常完美的菜单,实现了多风格,操作上也很友好地支持按键的操作,功能基本上能满足大多应用软件的要求。
当然,本开始菜的实现是相当复杂的,存在的问题也是意料之中的,希望大家批评指正并提出保贵意见。
本人的联系方式QQ号:
让你的软件界面更漂亮(6)
--仿QQ主界面之ListCtrl
本文详细介绍让你的软件界面更漂亮(六)--仿QQ主界面之ListCtrl
本文示例源代码或素材下载
QQ软件主界面的ListCtrl是可以说非常经典了,一个字漂亮!
这个ListCtrl的所包含的信息之丰富,更是让我们这些软件工程师望Q兴叹!
今天,我将和大家一起来写一个属于自已的CMyListCtrl。
一、实现CMyListCtrl要完成的任务及实现方法分析。
1.MyListCtrl显示彩色图片头像(在线用户头)
让CMyListCtrl显示彩色图片作为头像很容易,用CImageList加载规格相同的图片到其中,然后让CimageList和CMyListCtrl关联就可实现,向ImageList添加图片或图标的三种方法代码总结如下:
CImageListm_imageList;
(40,40,ILC_MASK|ILC_COLOR32,1,1);
IMAGE_ICON,0,0,LR_LOADFROMFILE)
(hIcon);
CMyListCtrl显示灰色图片头像(非在线用户)
显示灰色图片的方法可用图像处理软件处理成单色位图文件后使用,也可用软件代码实现转换,前者的方法处理位图文件个数不多是还行,否则就显得麻烦了,其优点运行速度快。
用软件代码转换的方法也是可行的,象LoadImage()或CopyImage()API都可实现,但要占用很多CUP时间。
对比两种方法,我选择后者,原因不用说我想大家也清楚。
实现彩色图片到单色位图转换的方法是先获取CMyListCtrl的ImageList并提取ListCtrl中的Item对应的图像后,用代码转换成单色位图并在原位置显示。
转换过程如下:
CImageList*pImageList=NULL;
pImageList=GetImageList(LVSIL_SMALL);
if(pImageList!
=NULL)
HICONhIcon=NULL;
hIcon=pImageList->
ExtractIcon(nItem);
HBITMAP hbitmap,hBitmapMask;
ICONINFO*iconinfo=newICONINFO;
if(:
GetIconInfo(hIcon,iconinfo))
hbitmap = iconinfo->
hbmColor;
hBitmapMask=iconinfo->
hbmMask;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 界面 漂亮