使用API函数在用户区绘图、输出文本
2009-09-27 20:36
218 查看
#include<windows.h>
#include<stdlib.h>
#include<string.h>
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
PAINTSTRUCT PtStr;
static long nXChar,nCaps,nYChar,pointx,pointy;
TEXTMETRIC tm;
static char *textbuf[]=
{
"故人西辞黄鹤楼",
"烟花三月下扬州",
"孤帆远影碧空尽",
"唯见长江天际流",
};
switch(iMessage)
{
case WM_CREATE:
hDC=GetDC(hWnd);
GetTextMetrics(hDC,&tm)
e28f
;
nXChar=tm.tmAveCharWidth;
nYChar=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hWnd,hDC);
return 0;
case WM_PAINT:
hDC=BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
hPen=CreatePen(PS_SOLID,2,RGB(255,0,0));
SelectObject(hDC,hPen);
POINT point1[3];
point1[0].x=50;
point1[0].y=50;
point1[1].x=100;
point1[1].y=50;
point1[2].x=75;
point1[2].y=100;
Polygon(hDC,point1,3);
Ellipse(hDC,50,100,100,150);
POINT point2[5];
point2[0].x=75;
point2[0].y=150;
point2[1].x=50;
point2[1].y=175;
point2[2].x=50;
point2[2].y=225;
point2[3].x=100;
point2[3].y=225;
point2[4].x=100;
point2[4].y=175;
Polygon(hDC,point2,5);
hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);
SelectObject(hDC,hBrush);
RoundRect(hDC,200,50,250,100,15,15);
Pie(hDC,200,100,250,150,215,100,230,100);
Rectangle(hDC,200,150,250,200);
int i,j;
for(i=4;i>0;i--)
for(j=0;j<7;j++)
{
pointx=500+i*nXChar*5;
pointy=50+j*(nYChar+nCaps);
TextOut(hDC, pointx, pointy,textbuf[4-i]+j*2,2);
}
EndPaint(hWnd,&PtStr);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)
{
HWND hWnd;
hWnd=CreateWindow("WinFill",
"VC++ 实习一",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="WinFill";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
相关文章推荐
- ZeroMQ接口函数之 :zmq_z85_encode – 使用Z85算法对一个二进制秘钥进行加密,输出可打印的文本
- VS2010编译报错:error MSB8011: 未能注册输出。请尝试启用“逐用户重定向”,或者使用提升的权限从命令提示符处注册该组件
- 在ABAP程序中,如何在输出显屏时使用定义好的选屏文本 selection texts
- 如何使用 awk 输出文本中的字段和列
- 用户使用键盘循环输入字符,select监听终端,将用户输入的字符输出到终端上
- 字符串处理是许多程序中非常重要的一部分,它们可以用于文本显示,数据表示,查找键和很多目的.在Unix下,用户可以使用正则表达式的强健功能实现这些 目的,从Java1.4起,Java核心API就引入了java.util.regex程序包,它是一种有价值的基础
- 使用BigDecimal 将科学计数法变成普通的文本格式输出
- IO 使用File创建文本 streamwrite 写入字符,streamread输出字符
- error MSB8011: 未能注册输出。请尝试启用“逐用户重定向”,或者使用提升的权限从命令提示符处注册该组件
- 使用struts2标签输出带html标签的文本内容
- Java绘图: 使用Graphics类绘制线段、矩形、椭圆/圆弧/扇形、图片、文本
- MFC单文档应用程序基础训练——文本输出、绘图等
- 使用Text...Endtext输出文本行、表达式和函数的结果及内存变量的内容
- Windows编程 基本资源的使用 如何在窗口中输出一些简单的文本
- 在shell中使用echo命令输出带颜色的文本
- 在shell中使用echo命令输出带颜色的文本
- 要求从用户输入的多行文本中提取学生的姓名、学号及登录日期,并封装到 Student 类中作为类的私有属性。创建一个Student类型的对象数组,对学号进行 升序排序并输出。
- 使用GDI+保存用户的绘图数据.
- 使用Struts2标签输出带HTML标签的文本内容
- 【IOS 开发学习总结-OC-65】Quartz 2D绘图(4-2)——绘制文本+设置阴影+使用路径