椭圆窗体的实现

揍死李开端

揍死李开端

2016-01-29 11:54

椭圆窗体的实现,椭圆窗体的实现

椭圆窗体的实现
作者:张建明

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

下载本文示例源代码

代码运行效果图如下:


我将分三部分介绍这一程序的实现过程:
1. 生成椭圆形图形界面,并在上面写斜体带颜色的子和鼠标拖动功能。
2. 增加鼠标右键菜单,并实现总在前面和其他程序自动覆盖的功能。
3. 生成鼠标的全局钩子,截获鼠标事件,返回****的值。

1. 生成椭圆形图形界面,并在上面写斜体带颜色的子。
在VC集成编译环境中,选择“文件”,“新建”,然后选择“工程”选项卡。在左侧的工程选择项中选取“MFC AppWizard[exe]”,在右侧工程标题下的编辑框中输入“EllipseWindow”。
单击“确定”按钮,进入“MFC AppWizard step-1”选择页,选中“D基本对话框”左侧的单选按钮,将应用程序的类型设为基本对话框,然后点击“完成”按钮后点击“确定”即可。

在自动生成的“IDD_ELLIPSEWINDOW_DIALOG”对话框资源中删除“取消”,“确定”按钮和标题为“TODO:在这里设置对话框”的文本框。此时,编译运行这个程序,应该能在窗口弹出一个空的对话框。

椭圆窗体的实现主要是靠CRgn类来实现的。

1.1 生成椭圆窗体
在类CEllipseWindowDlg的定义中填加CRgn m_rgnWnd的protected型变量。在CEllipseWindowDlg::OnInitDialog()中加入如下代码:

CRect rc;GetClientRect(rc);m_rgnWnd.CreateEllipticRgn(rc.left+32,rc.top+32,rc.Width()-64,rc.Height()-20);SetWindowRgn((HRGN)m_rgnWnd,TRUE);
此时运行这个程序,将出现一个灰色的椭圆窗体。如果不能关闭这个应用程序,可用Alt+F4关闭这个程序。

1.2 按下鼠标左键后,用鼠标拖动椭圆的实现方法。
使用类向导,添加CEllipseWindowDlg的WM_MOUSEMOVE的处理函数CEllipseWindowDlg::OnMouseMove(UINT nFlags, CPoint point),代码如下:

static CPoint p;ClientToScreen(&point);if(nFlags & MK_LBUTTON){SetCursor(LoadCursor(NULL,IDC_CROSS));CRect rc;GetWindowRect(rc);MoveWindow(rc.left+point.x-p.x,rc.top+point.y-p.y,rc.Width(),rc.Height());}p=point;
此时运行程序,按下鼠标左键,就可以拖动椭圆窗体了。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
1.3 为这个窗体添加渐变的背景颜色。
在CEllipseWindowApp增加public成员函数void CEllipseWindowApp::SetBkColor(),代码为:
static BYTE x=80,y=40,z=30;static BOOL flagx=TRUE,flagy=FALSE,flagz=TRUE;if(flagx){x++;if(x>120)flagx=FALSE;}else{x--;if(x<10)flagx=TRUE;}if(flagy){y+=2;if(y>100)flagy=FALSE;}else{y-=2;if(y<20)flagy=TRUE;}if(flagz){z+=3;if(z>80)flagz=FALSE;}else{z-=3;if(z<20)flagz=TRUE;}SetDialogBkColor(RGB(x,y,z),RGB(x+100,y+120,140));
此时运行程序,椭圆界面的颜色就会自动发生渐变。

在EllipseWindowDlg.cpp中加入代码:
extern CEllipseWindowApp theApp;
在CEllipseWindosDlg中加入定时器void CEllipseWindowDlg::OnTimer(UINT nIDEvent),其中的实现代码为:
theApp.SetBkColor();Invalidate();
在BOOL CEllipseWindowDlg::OnInitDialog()中加入对初始化定时器代码:
SetTimer(1,20,NULL);
1.4 在窗体上显示欢迎词“enjoy!!!”
添加CEllipseWindowDlg的protected数据成员 CFont m_font;
在BOOL CEllipseWindowDlg::OnInitDialog()中创建字体,代码如下:
LOGFONT lf;SystemParametersInfo(SPI_GETICONTITLELOGFONT,sizeof(LOGFONT),&lf,SPIF_SENDWININICHANGE);lf.lfHeight=60;lf.lfEscapement=100;lf.lfItalic=TRUE;lf.lfQuality=DRAFT_QUALITY;m_font.CreateFontIndirect(&lf);
在void CEllipseWindowDlg::OnPaint()中加入显示代码:
CPaintDC dc(this);dc.SetBkMode(TRANSPARENT);dc.SetTextAlign(TA_BASELINE|TA_CENTER);CRect rc;GetClientRect(rc);CFont *oldfont=dc.SelectObject(&m_font);dc.TextOut(rc.Width()/2,rc.Height()/2,"enjoy!!!");dc.SelectObject(oldfont);
好了,第一步完成了,也累了,have a rest :-)
检查一下我们的成果:程序运行,显示椭圆窗体,显示 “enjoy!!!”,并且背景颜色在不停的改变,按下鼠标左键后可以拖动。

2. 增加鼠标右键菜单,并实现总在前面和其他程序自动覆盖的功能。

2.1 增加鼠标右键菜单
添加资源中添加菜单资

展开更多 50%)
分享

猜你喜欢

椭圆窗体的实现

C语言教程 C语言函数
椭圆窗体的实现

椭圆形的窗体

编程语言 网络编程
椭圆形的窗体

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

实现窗体的渐变背景

编程语言 网络编程
实现窗体的渐变背景

VisualBasic窗体背景花纹的实现

编程语言 网络编程
VisualBasic窗体背景花纹的实现

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

透明窗体的又一实现

C语言教程 C语言函数
透明窗体的又一实现

用VisualBasic窗体背景花纹的实现

编程语言 网络编程
用VisualBasic窗体背景花纹的实现

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Pro/ENGINEER 阵列完全手册(一)

Pro/ENGINEER 阵列完全手册(一)

在EVC3.0中创建MDI程序

在EVC3.0中创建MDI程序
下拉加载更多内容 ↓