win32编程笔记

来源:互联网 发布:淘宝客团队运营思路 编辑:程序博客网 时间:2024/05/16 16:21
//获取窗口尺寸(画对角线)
GetClientRect(hWnd, &rect);
MoveToEx(hdc, rect.left, rect.top, NULL);
LineTo(hdc, rect.right, rect.bottom);


//数组点相连
POINT apt[4] = { 100, 100, 200, 100, 200, 200, 100, 200 };
Polyline(hdc, apt, sizeof(apt) / sizeof(POINT));//无视点的位置
PolylineTo(hdc, apt, sizeof(apt) / sizeof(POINT));//从起始点开始连数组里的点,最后保留位置


//边框绘制
Rectangle(hdc,xLeft,yTop,xRight,yBottom);//画矩形
Ellipse(hdc,xLeft,yTop,xRight,yBottom);//在矩形内画椭圆
RoundRect(hdc,xLeft,yTop,xRight,yBottom,xCornerEllipse,yCornerEllipse);//圆角矩形
Arc(hdc,xLeft,yTop,xRight,yBottom,xStart,yStart,xEnd,yEnd);//圆弧
Chord//加一条弦
Pie//扇形


//贝塞尔曲线
PolyBezier(hdc,apt,iCount);//四个点,起点,控点一,控点二,终点
PolyBezierTo(hdc,apt,iCount);//三个点,控点一,控点二,终点


//画笔
HPEN hPen;
hPen = (HPEN)GetStockObject(BLACK_PEN);//选择备用画笔
SelectObject(hdc, hPen);//应用
//创建画笔
hPen=CreatePen(iPenStyle,iWidth,crColor);
/*iPenStyle:
  PS_SOLID  实心线
  PS_DASH 虚线
  PS_DOT  点线
  PS_DASHDOT  点划线
  PS_DASHDOTDOT 双点划线
  PS_NULL 无
  PS_INSIDEFRAME  边缘对中的实心线*/
//iWidth系统默认为 1
WM_CREATE:
static HPEN hPen1,hPen2,hPen3;
hPen1=CreatePen(PS_SOLID,1,0);
hPen2=CreatePen(PS_SOLID,3,RGB(255,0,0));
hPen3=CreatePen(PS_DOT,0,0);
COLORREF crColor;
crColor = RGB(0, 255, 255);
hPen = CreatePen(PS_DOT, 1, crColor);
//保存默认画笔
hPenOld=(HPEN)SelectObject(hdc,hPen);


SelectObject(hdc,hPenOld);
DeleteObject(hPen);


//点划线等的空隙处填充颜色,默认背景色
SetBKColor(hdc,crColor);
SetBKColor(hdc,TRANSPARENT);//透明
GetBKMode //查询填充色


//画刷
HBRUSH hBrush;
hBrush=GetStockObject(hdc,hBrush);
SelectObject(hdc,hBrush);
/*备用画刷
  WHITE_BRUSH
  LTGRAY_BRUSH
  GRAY_BRUSH
  DKGRAY_BRUSH
  BLACK_BRUSH
  NULL_BRUSH */
hBrush=CreateSolidBrush(crColor);
hBrush=CreateHatchBrush(iHatchStyle,crColor);
/*iHatchStyle表示阴影线标记的外观
    HS_HORIZONTAL 水平线
    HS_VERTICAL 竖直线
    HS_FDIAGONAL  主斜线
    HS_BDIAGONAL  副斜线
    HS_CROSS  正交格子
    HS_DIAGCROSS  斜格子 */


//多边形填充
Polygon(hdc,apt,iCount);//会自动首尾相连


PolyPolygon(hdc,apt,aiCounts,iPolyCount);
/*  绘制多个多边形
    iPolyCount为多边形个数
    aiCounts数组为当前多边形的点数 */


//可以设置填充模式,默认为ALTERNATE(交替)
SetPolyFillMode(hdc,iMode);
//iMode:ALTERNATE(交替)   WINDING(螺旋)
/*  ALTERNATE:从一个封闭区域的一点向无穷远画线,若穿过奇数条线,则填充,否则不填充;
    WINDING:如果穿过奇数条线,则填充;若穿越的偶数条线中,不同方向的数目相等,则不填充;*/


//映射模式(默认左上角原点,像素)
SetMapMode(hdc,iMapMode);
/*iMapMode映射模式
  MM_TEXT 像素 右下正方向
  MM_LOMETRIC 0.1mm 右上
  MM_HIMETRIC 0.01mm  右上
  MM_LOENGLISH  0.01in 右上
  MM_HIENGLISH  0.001in 右上
  MM_TWIPS  1/1440in 右上
  MM_ISOTROPIC  任意(x=y) 可选
  MM_ANISOTROPIC  任意(x!=y)  可选 */
iMapMode=GetMapMode(hdc);//获取当前映射模式
SetMapMode(hdc,MM_LOENGLISH);
TextOut(hdc,50,-100,TEXT("hello"),5);//左上角向右0.5英寸,向下1英寸




//设置时钟
case WM_CREATE:
SetTimer(hWnd, 9999, 1000, NULL);
break;
case WM_TIMER:
    if (wParam == 9999)
    InvalidateRect(hWnd, NULL, true);
  break;


//字体颜色
SetTextColor(hdc,crColor);
//背景颜色
SetBkColor(hdc,crColor);


//获取文字信息
GetTextMetrics(hdc,&tm);
/*tmHeight //高度
tmExternalLeading //行间距
tmAveCharWidth //小写字符的加权平均宽度,大写按照1.5倍计算
tmMaxCharWidth //字体中最宽的字符的宽度*/


TextOut(hdc, 100, 100, L"你好世界", 5);
//exam2
int iLength;
TCHAR szBuffer[40];
iLength=wsprintf(szBuffer,TEXT("The sum of %i and %i is %i"),iA,iB,iA+iB);
TextOut(hdc,x,y,szBuffer,iLength);


//字体
hFont=GetStockObject(iFont);
SelectObject(hdc,hFont);


//创建字体的函数
HFONT createMyFont(TCHAR *name, int height)
{
return CreateFont
(
height,//字体高度
0,//宽度,0表示最佳宽度
0,//文本倾斜度
0,//字体倾斜度
FW_HEAVY,//字体粗度,这个表示最粗
0,//非斜体字
0,//无下划线
0,//无删除线
GB2312_CHARSET,//使用的字符集
OUT_DEFAULT_PRECIS,//输出精度为默认精度
CLIP_DEFAULT_PRECIS,//剪裁精度为默认精度
DEFAULT_QUALITY,//输出质量为默认值
DEFAULT_PITCH | FF_DONTCARE,//字间距和字体系列使用默认值
name
);
}


//
LPWSTR poem[4] = { L"白日依山尽", L"黄河入海流", L"欲穷千里目", L"更上一层楼" };
LPWSTR str;
hFont = createMyFont(L"黑体", 20);
SelectObject(hdc, hFont);
str = poem[0];
TextOut(hdc, 100, 100, str, 5);
hFont = createMyFont(L"宋体", 30);
crColor = RGB(255, 0, 0);
SetTextColor(hdc, crColor);
SelectObject(hdc, hFont);
str = poem[1];
TextOut(hdc, 100, 200, str, 5);





0 0