电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

椭圆窗体的实现


发布日期:2021/12/21
 

椭圆窗体的实现

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

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

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

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

CRect rc;GetClientRect(rc);m_rgnWndCreateEllipticRgn(rcleft+rctop+rcWidth()rcHeight());SetWindowRgn((HRGN)m_rgnWndTRUE);

此时运行这个程序将出现一个灰色的椭圆窗体如果不能关闭这个应用程序可用Alt+F关闭这个程序

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

static CPoint p;ClientToScreen(&point);if(nFlags & MK_LBUTTON){ SetCursor(LoadCursor(NULLIDC_CROSS)); CRect rc; GetWindowRect(rc); MoveWindow(rcleft+pointxpxrctop+pointypyrcWidth()rcHeight());}p=point;

此时运行程序按下鼠标左键就可以拖动椭圆窗体了


为这个窗体添加渐变的背景颜色
在CEllipseWindowApp增加public成员函数void CEllipseWindowApp::SetBkColor()代码为

static BYTE x=y=z=;static BOOL flagx=TRUEflagy=FALSEflagz=TRUE;if(flagx){ x++; if(x>) flagx=FALSE;}else{ x; if(x<) flagx=TRUE;}if(flagy){ y+=; if(y>) flagy=FALSE;}else{ y=; if(y<) flagy=TRUE;}if(flagz){ z+=; if(z>) flagz=FALSE;}else{ z=; if(z<) flagz=TRUE;}SetDialogBkColor(RGB(xyz)RGB(x+y+));

此时运行程序椭圆界面的颜色就会自动发生渐变

在EllipseWindowDlgcpp中加入代码

extern CEllipseWindowApp theApp;

在CEllipseWindosDlg中加入定时器void CEllipseWindowDlg::OnTimer(UINT nIDEvent)其中的实现代码为:

theAppSetBkColor();Invalidate();

在BOOL CEllipseWindowDlg::OnInitDialog()中加入对初始化定时器代码

SetTimer(NULL);

在窗体上显示欢迎词enjoy!!!
添加CEllipseWindowDlg的protected数据成员 CFont m_font;
在BOOL CEllipseWindowDlg::OnInitDialog()中创建字体代码如下

LOGFONT lf;SystemParametersInfo(SPI_GETICONTITLELOGFONTsizeof(LOGFONT)&lfSPIF_SENDWININICHANGE);lflfHeight=;lflfEscapement=;lflfItalic=TRUE;lflfQuality=DRAFT_QUALITY;m_fontCreateFontIndirect(&lf);

在void CEllipseWindowDlg::OnPaint()中加入显示代码

CPaintDC dc(this);dcSetBkMode(TRANSPARENT);dcSetTextAlign(TA_BASELINE|TA_CENTER);CRect rc;GetClientRect(rc);CFont *oldfont=dcSelectObject(&m_font);dcTextOut(rcWidth()/rcHeight()/"enjoy!!!");dcSelectObject(oldfont);

好了第一步完成了也累了have a rest :)
检查一下我们的成果程序运行显示椭圆窗体显示 enjoy!!!并且背景颜色在不停的改变按下鼠标左键后可以拖动

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

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

上一篇:动态菜单项、状态条提示、工具条提示问题

下一篇:关于如何换肤、子类化的解决方案