当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 椭圆窗体的实现
椭圆窗体的实现 下载本文示例源代码 1. 生成椭圆形图形界面,并在上面写斜体带颜色的子。 在自动生成的“IDD_ELLIPSEWINDOW_DIALOG”对话框资源中删除“取消”,“确定”按钮和标题为“TODO:在这里设置对话框”的文本框。此时,编译运行这个程序,应该能在窗口弹出一个空的对话框。 椭圆窗体的实现主要是靠CRgn类来实现的。 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 按下鼠标左键后,用鼠标拖动椭圆的实现方法。 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; 此时运行程序,按下鼠标左键,就可以拖动椭圆窗体了。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. 增加鼠标右键菜单,并实现总在前面和其他程序自动覆盖的功能。 |