windows中,矩形结构RECT通过左上角和右下角两个点控制。
RECT rect;
rect.left = xLeft ;
rect.top = xTop ;
rect.right = xRight ;
rect.bottom = xBottom ;
矩形支持操作很多,比如OffsetRect (&rect, x, y) ;(将矩形移动);IntersectRect (&DestRect, &SrcRect1, &SrcRect2) ;获得两个矩形的交集;bInRect = PtInRect (&rect, point) ;判断点是否在矩形里等。这里不一一细讲了。
有一点需要注意,通常我们可以使用GetClientRect来或得整个客户区,将它存在一个RECT结构中,非常方便。
什么又是区域呢?区域可以使矩形、椭圆,多边形,或者是多个它们的组合,如何或得区域呢,以矩形为例,通过CreateRectRgnIndirect就能或得一个矩形区域了。先看一个简单程序:
#include <windows.h>
#include <math.h>
LRESULT CALLBACK WndProc (HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance, //当前实例句柄
HINSTANCE hPrevInstance, //先前实例句柄
LPSTR lpCmdLine, //命令行
int iCmdShow) //显示状态
{
static TCHAR szAppName[] = TEXT("画图");
//窗口句柄
HWND hwnd;
//消息
MSG msg;
//窗口类
WNDCLASS wndclass;
//窗口风格:当移动窗口或者改变大小时重绘窗口
wndclass.style = CS_HREDRAW | CS_VREDRAW;
//指明回调函数
wndclass.lpfnWndProc = WndProc;
//额外的比特用来确认下一个窗口类的位置,暂时不用
wndclass.cbClsExtra = 0;
//额外的比特用来确认下一个窗口实例的位置,暂时不用
wndclass.cbWndExtra = 0;
//实例句柄
wndclass.hInstance = hInstance;
//装载图标
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
//装载光标
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
//背景为白色
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);
//菜单:暂时没有
wndclass.lpszMenuName = NULL;
//窗口类名
wndclass.lpszClassName = szAppName;
//注册窗口
if(!RegisterClass(&wndclass))
{
return -1;
}
//创建窗口
hwnd