学习windows编程 day5 之 区域裁剪
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static int cxClient, cyClient;
HRGN hRgn[];
static HRGN hTotRgn;
double fAngle, fRadius;
HCURSOR hCursor; switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam); hCursor = SetCursor(LoadCursor(NULL, IDC_WAIT));
ShowCursor(TRUE); //创建四个区域
//先左右两个
hRgn[]=CreateEllipticRgn(, cyClient / , cxClient / , cyClient * / );
hRgn[] = CreateEllipticRgn(cxClient, cyClient / , cxClient / , cyClient * / );
//后上下两个
hRgn[] = CreateEllipticRgn(cxClient / , , cxClient * / , cyClient / );
hRgn[] = CreateEllipticRgn(cxClient / , cyClient/, cxClient * / , cyClient);
//其余的先设为一个较小的区域(空)
hRgn[] = CreateEllipticRgn(, , , );
hRgn[] = CreateEllipticRgn(, , , );
hTotRgn = CreateEllipticRgn(, , , );
//调用combinRgn后原来这些区域会被销毁 //先合并左右
CombineRgn(hRgn[], hRgn[], hRgn[], RGN_OR);
CombineRgn(hRgn[], hRgn[], hRgn[], RGN_OR); //合并为一个总区域句柄
CombineRgn(hTotRgn, hRgn[], hRgn[], RGN_XOR); for (int i = ; i < ; i++)
DeleteObject(hRgn[i]); SetCursor(hCursor);
ShowCursor(TRUE);
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect); SetViewportOrgEx(hdc, cxClient / , cyClient / , NULL);
//选中剪切区域后,会在这个区域作图
SelectClipRgn(hdc, hTotRgn); FrameRgn(hdc, hTotRgn, (HBRUSH)GetStockObject(BLACK_BRUSH),,); //内部画阴影
fRadius = _hypot(cxClient / , cyClient / );//直角三角形斜边 for (fAngle = 0.0; fAngle < PI * ;fAngle += PI*/)
{
MoveToEx(hdc, , , NULL);
LineTo(hdc, (int)(fRadius*cos(fAngle) + 0.5), (int)(-fRadius*sin(fAngle) + 0.5));
} EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
DeleteObject(hTotRgn);
PostQuitMessage();
return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
}
学习windows编程 day5 之 区域裁剪的更多相关文章
- 学习windows编程 day5 之按键消息
case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...
- 有一定基础的 C++ 学习者该怎样学习 Windows 编程?
人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...
- 我为什么学习Windows编程
前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...
- 学习windows编程 day3 之滚动条完善
1.不再使用setscrollrange,setscrollpos,getscrollrange,getscrollpos这些函数,这只是有助于理解其中运行原理 2.改用setscrollinfo,g ...
- 学习windows编程 day4 之 自定义映射
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...
- 学习windows编程 day2 之滚动条使用
相关函数: setscrollrange,setscrollpos,getscrollrange,getscrollpos 使用滚动条时我们需要进行的操作: 1.初始化滚动条范围和位置 在窗口创建时W ...
- 学习windows编程 day1
#include <windows.h> #include <strsafe.h> /* 任务:去掉标题栏和边框 */ //#define LineHeight 15 这是自己 ...
- 学习windows编程 day6 之处理鼠标移动
#define POINT_MAX 1000 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara ...
- 学习windows编程 day4 之 绘制随机矩形和peekMessage
#include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...
随机推荐
- Windows 7 64位安装cURL
安装cURL. 1, 下载64位的SSL版cURL,网址: http://curl.download.nextag.com/download/curl-7.21.7-win64-ssl-sspi.zi ...
- Java与JavaScript之间关于JSON的是非恩怨
http://blog.csdn.net/joyhen/article/details/43271569 js 单引号替换成双引号,双引号替换成单引号 操作 解决问题的场景: Java端生成了JSON ...
- node的经典事件监听
let fs = require('fs'); let Event = require('events'); let myEvent = new Event(); //注册一个订阅者 A myEven ...
- ecshop验证码图片无法显示终极解决办法
ecshop验证码图片无法显示终极解决办法 ECSHOP教程/ ecshop教程网(www.ecshop119.com) 2014-06-06 客户在安装好ecshop之后所有前台的证码不显示,后 ...
- Visual Studio 2017 激活密钥 [复制记录]
Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(VS201 ...
- SQL SELECT INTO
SQL SELECT INTO 语句 1. SELECT *INTO table1 FROM table //将table的数据复制到 table2中 但是我自己进行试验时, SELECT * INT ...
- vim鼠标模式打开与关闭
开启鼠标模式 :set mouse=x, x取值如下, 例如:set mouse=a, 开启所有模式的mouse支持 n 普通模式 v 可视模式 i 插入模式 c 命令行模式 ...
- super 使用以及原理
用super也很久了,但是一直没有关注过他的原理.最近开始越来越多关注python更底层的实现和奇技淫巧.看到该方法越发使用得多所以也研究了一波 平时单继承可能是我们遇到最多的情况.无非就是类似情况. ...
- 监控系统 & monitoring & DevOps
监控系统 & monitoring & DevOps https://github.com/topics/monitoring https://github.com/marketpla ...
- 照片 GPS 信息查询
照片 GPS 信息查询 经纬度查询 https://jingweidu.51240.com/ // 30.27832833333333, 120.01914111111111 30 + 16/60 + ...