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 之 区域裁剪的更多相关文章

  1. 学习windows编程 day5 之按键消息

    case WM_KEYDOWN://带sys的按键消息大多是系统需要自己处理的,我们一般不需要,默认处理 //wParam 指定按键的虚拟键代码 //lParam 指定技术,扫描码,闲钱状态,转换状态 ...

  2. 有一定基础的 C++ 学习者该怎样学习 Windows 编程?

    人的心理有个奇异的特性:一项知识一旦学会之后,学习过程中面临的困惑和不解非常快就会忘得干干净净,似乎一切都是自然而然,本来就该这种.因此,关于「怎样入门」这类问题,找顶尖高手来回答,未必能比一个刚入门 ...

  3. 我为什么学习Windows编程

    前一段时间在看TCP/IP,在图书馆里面找了不少的书,其中有几本书还是不错的.比如: <Windows网络与通信程序设计(第二版)> 王艳平著 <WinSock网络编程经络> ...

  4. 学习windows编程 day3 之滚动条完善

    1.不再使用setscrollrange,setscrollpos,getscrollrange,getscrollpos这些函数,这只是有助于理解其中运行原理 2.改用setscrollinfo,g ...

  5. 学习windows编程 day4 之 自定义映射

    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRU ...

  6. 学习windows编程 day2 之滚动条使用

    相关函数: setscrollrange,setscrollpos,getscrollrange,getscrollpos 使用滚动条时我们需要进行的操作: 1.初始化滚动条范围和位置 在窗口创建时W ...

  7. 学习windows编程 day1

    #include <windows.h> #include <strsafe.h> /* 任务:去掉标题栏和边框 */ //#define LineHeight 15 这是自己 ...

  8. 学习windows编程 day6 之处理鼠标移动

    #define POINT_MAX 1000 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lPara ...

  9. 学习windows编程 day4 之 绘制随机矩形和peekMessage

    #include <windows.h> #include <strsafe.h> LRESULT CALLBACK WndProc(HWND hwnd, UINT messa ...

随机推荐

  1. EL表达式和JSTL标签库

    expresion language表达式语言 可以输出表达式的值.跟jsp的表达式脚本一样.计算表达式的值后输出.  EL表达式出现的目的是为了使JSP写起来更加简单,让jsp的代码更佳简化. 1. ...

  2. Android中加解密算法大全

    Base64编码 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,本质上是一种将二进制数据转成文本数据的方案,对于非二进制数据,是先将其转换成二进制形式,然后每连续6比特(2的6次 ...

  3. Jest & React & Enzyme

    Jest & React & Enzyme auto units testing https://reactjs.org/docs/test-utils.html https://gi ...

  4. java程序在windows系统作为服务程序运行

    Java程序很多情况下是作为服务程序运行的,在Un*x 平台下可以利用在命令后加“&”把程序作为后台服务运行,但在Windows下看作那个Console窗口在桌面上,你是否一直担心别的同时把你 ...

  5. codeforces586B

    Laurenty and Shop CodeForces - 586B A little boy Laurenty has been playing his favourite game Nota f ...

  6. Luogu5155 USACO18DEC Balance Beam(概率期望+凸包)

    假设已经求出了在每个点的最优期望收益,显然最优策略是仅当移动一次后的期望收益>当前点收益时移动.对于初始点,其两边各存在一个最近的不满足上述条件的位置,因此从初始点开始随机游走,直到移动到这两个 ...

  7. Luogu3804 【模板】后缀自动机(后缀自动机)

    建出parent树统计即可.开始memcpy处写的是sizeof(son[y]),然后就T掉了……还是少用这种东西吧. 同时也有SA做法.答案子串一定是名次数组中相邻两个串的lcp.单调栈统计其是几个 ...

  8. java BigDecimal加减乘除 与 保留两位小数

    BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5&quo ...

  9. MT【5】蝴蝶效应:一道递推式为二次的数列

                                      评:蝴蝶效应[蝴蝶效应(The Butterfly Effect)是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨 ...

  10. C代码快速构建框架

    #include "stdio.h" typedef char int8_t; typedef short int16_t; typedef int int32_t; typede ...