用VC++制作变形窗体
用VC++制作变形窗体
首先,我们要建立一个基于对话框的工程distort,这样生成了三个类,即CAboutDlg , CDistort , CDistortDlg ,我们将要进行大改动的是CDistortDlg类,因此我们给出此文件的原代码,有改动的地方 我们用粉色字表出,并加人注释。
// distortDlg.h : header file // #if !defined(AFX_DISTORTDLG_H__B21CDC69_5A48_11D7_A464_00055DE445C1__INCLUDED_) #if _MSC_VER > 1000 // CDistortDlg dialog class CDistortDlg : public CDialog // Dialog Data // ClassWizard generated virtual function overrides // Implementation // Generated message map functions //重载 WM_NCTHITEST 消息,单激对话框任何部位都可移动对话框 private: //窗体初始的矩形对象 }; {{AFX_INSERT_LOCATION}} #endif // !defined(AFX_DISTORTDLG_H__B21CDC69_5A48_11D7_A464_00055DE445C1 |
下一步,我们先将对话框的属性中的stype设为popup ,而Border设为none,如图:
在此类的实现文件中,我们就将系统自动生成的函数略去了,只写出有改动的地方
// distortDlg.cpp : implementation file // #include "stdafx.h" #if def _DEBUG /// class CAboutDlg : public CDialog ON_WM_NCHITTEST() #define EVENT_REDRAW 0 BOOL CDistortDlg::OnInitDialog() // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. CMenu* pSysMenu = GetSystemMenu(FALSE); // Set the icon for this dialog. The framework does this automatically // TODO: Add extra initialization here //-------------------------set time---------------------------- |
其中椭圆效果是通过 int SetWindowRgn(HRGN hRgn,BOOL bRedraw);
而参数 hRgn 是窗体区的句柄, 参数 bRedraw 是决定是否要重画窗体,在本例中Windows 向窗体发送 WM_PAINT消息,从而调用 OnPaint()函数,
下面我们来修改此函数
void CDistortDlg::OnPaint() { CPaintDC dc(this); if (IsIconic()) { // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle // Draw the icon //获得客户区的尺寸 CBrush *pBrushOld; //定义画刷,在此你可以更改颜色 //下面编写实现窗体任意托动的函数 HCURSOR CDistortDlg::OnQueryDragIcon() UINT CDistortDlg::OnNcHitTest(CPoint point) //下面编写定时器实数 //若想结果n次变化后正好便为圆形,则设此值为 1.035 void CDistortDlg::OnTimer(UINT nIDEvent) CRect rectWnd; //确定窗体区域中心 //分情况处理各种定时事件 //确定窗体的矩形大小 //释放对象 //创建椭圆区域 SetWindowRgn((HRGN)m_rgn,TRUE); if(nCount==10)//设置变化次数,此为10次 |
最后的效果如图:
希望大家通过对本例的实践,初步了解 MFC 的对话框机制 (细节请参见《Vicual c++ 高级编程》)
用VC++制作变形窗体相关推荐
- C#WinForm制作异形窗体/控件
制作异形窗体或控件的思路一般都是想办法生成一个region,然后设置给指定的窗口或控件.生成region的方法有很多,最常用的就是从一幅图片生成,把该图片中的透明色部分"抠"掉,剩 ...
- C# 制作不规则窗体的两种解决方案
我的广告单元,有空点一下哦,谢谢! 冒着被拍砖的危险,投放到首页.C#制作不规则窗体应该又是一个老生常谈的问题了,可能很多老鸟会带BS的眼神,那么请老鸟们视该文章如浮云吧. 制作不规则窗体,本例采用图 ...
- java 窗体 源码_Java制作MDI窗体源代码
由于实际需要做一个MDI窗体,百度里面找到一个不错的源代码给大家分享一下. import javax.swing.*; import java.awt.event.*; import java.awt ...
- 用VC++制作MSN、QQ 的消息提示窗口
用VC++制作MSN.QQ 的消息提示窗口 用过QQ和MSN聊天工具的人都知道,只要好友上线,就会在托盘的位置处显示一个提示窗口,以是拉帘式的,或者是淡入淡出的形式出现:想想何不为自己的程式也加一个漂 ...
- VC制作类似于IE4的酷工具条
用VC制作工具条的方法很多,本文提供一种制作类似于IE4.0的工具条.能实现鼠标移上图标时,图标变为彩色,在工具条的位置,能停摆几种工具条.具体原理解释见步骤过程. 步骤如下: 1. 运行App ...
- 电子脑PHP动画制作,用Flash制作变形动画效果
Flash中的变形动画是动画的一种类型,它和运动动画相反,只对图形起作用而对元件不能产生动画效果.应用变形动画可以产生一些奇妙的变形效果,能使课件更富有吸引力,下面小编就为大家介绍用Flash制作变形 ...
- 使用C#制作Windows窗体应用,实现一个微端下载器功能(多线程/断点续传/微端/下载器)
文章目录 一.前言 二.最终运行效果 三.Demo工程下载 四.工程类型 五.工程结构 六.多线程下载核心代码 一.前言 在PC端的QQ游戏大厅下载游戏的时候,我们会发现很多游戏都自己做了微端下载器, ...
- 【181114】VC++制作木质相框源代码
源码下载简介 VC++制作木质相框,呵呵,相当基础的例子,不要感觉神秘哦,新手参考吧. 源码下载地址:点击下载 备用下载地址:点击下载
- VC 获取控制台窗体的句柄(hWnd)
在Windows中,句柄是外国话,理解为编号的意思,只要你知道了这个窗口的句柄,就可以对这个窗体进行操作--移动窗体.改变窗体大小.把窗体极小化为图标等.Windows API函数中的句柄代表一些特殊 ...
最新文章
- Java_中快速获取系统时间
- python代码转换为pytorch_Pytorch中Tensor与各种图像格式的相互转化详解
- docker build 没有网络 执行dockerfile中yum报错 curl#6 - “Could not resolve host: mirrorlist.centos.org 解决方法
- 【小题目】输入三个数字,获取三个数字中的最小值
- ASP.NET Core - 基于IHttpContextAccessor实现系统级别身份标识
- [oracle原]访问局域网内出现“ORA-12541:TNS:无监听程序”
- HTML网页设计综合题,网页设计(Html5)试题C卷
- C#编程(二十五)----------接口
- webstorm 高效开发 (html)
- 老码识途——1.1反汇编机器码入门
- CSDN会员服务协议
- ThinkPHP在前台模板格式化输出时间
- 解决以太网IPv4无网络访问权限
- “黑暗潜伏者” -- 手机病毒新型攻击方式
- 胡阳pyhton作业题--20150801
- 没有软件开发人员,可以办理CMMI3级吗?
- 【转】定员108的车厢号码分布图
- Python绘制地图神器,上手直接开大!
- Linux 解压tar.bz2格式文件
- 免杀veil的简单使用
热门文章
- 产品人如何在小企业中夹缝生存?
- 能力清单:2020年SAAS的思考框架
- mysql begin end 用法_超实用的Mysql动态更新数据库脚本的示例讲解(推荐)
- java 对象的交互_Java中什么是对象的交互?解释一下交互怎么操作?
- 生态系统长期观测数据产品体系
- 作者:孔新川,杭州迈宁数据科技有限公司创始人、CEO。
- 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
- 大量Input还是要靠scanf(洛谷P5082题题解,弃坑Java拥抱C++)
- 质因数分解(洛谷P1075题题解,Java语言描述)
- 【Python】Python列表基本操作