ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:19.22KB ,
资源ID:438615      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-438615.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在窗口显示文字和绘制图形文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

在窗口显示文字和绘制图形文档格式.docx

1、在接收到WM_PAINT消息时,窗口消息处理程序可以取得无效矩形的坐标(我们马上就会看到这一点)。通过呼叫GetUpdateRect,可以在任何时候取得这些坐标。在处理WM_PAINT消息处理期间,窗口消息处理程序在呼叫了BeginPaint之后,整个显示区域即变为有效。程序也可以通过呼叫ValidateRect函数使显示区域内的任意矩形区域变为有效。如果这呼叫具有令整个无效区域变为有效的效果,则目前队列中的任何WM_PAINT消息都将被删除GDI相关的内容要在窗口的显示区域绘图,可以使用Windows的图形设备接口(GDI)函数(1). 设备内容句柄只不过是一个数值,Windows以它在内部

2、使用对象。程序写作者从Windows取得句柄,然后在其它函数中使用该句柄。设备内容句柄是GDI函数的窗口通行证,有了这种设备内容句柄,程序写作者就能自如地在显示区域上绘图,使图形如自己所愿地变得好看或者难看。设备内容(简称为DC)实际上是GDI内部保存的数据结构。设备内容与特定的显示设备(如视讯显示器或打印机)相关。对于视讯显示器,设备内容总是与显示器上的特定窗口相关。设备内容中的有些值是图形属性,这些属性定义了GDI绘图函数工作的细节。例如,对于TextOut,设备内容的属性确定了文字的颜色、文字的背景色、x坐标和y坐标映像到窗口的显示区域的方式,以及显示文字时Windows使用的字体。当程

3、序需要绘图时,它必须先取得设备内容句柄。在取得了该句柄后,Windows用内定的属性值填入内部设备内容结构。在后面的章节中您会看到,可以通过呼叫不同的GDI函数改变这些默认值。利用其它的GDI函数可以取得这些属性的目前值。当然,还有其它的GDI函数能够在窗口的显示区域真正地绘图。当程序在显示区域绘图完毕后,它必须释放设备内容句柄。句柄被程序释放后就不再有效,且不能再被使用。程序必须在处理单个消息处理期间取得和释放句柄。除了呼叫CreateDC()建立的设备内容之外,程序不能在两个消息之间保存其它设备内容句柄(2) 取得设备内容句柄的方法:方法一:caseWM_PAINT: hdc = Begi

4、nPaint (hwnd, &ps) ; 使用GDI函数 EndPaint (hwnd, & return 0 ;在处理WM_PAINT消息时,使用这种方法。它涉及BeginPaint和EndPaint两个函数,这两个函数需要窗口句柄(作为参数传给窗口消息处理程序)和PAINTSTRUCT结构的变量(在WINUSER.H表头文件中定义)的地址为参数在处理WM_PAINT消息时,窗口消息处理程序首先呼叫BeginPaint。BeginPaint函数一般在准备绘制时导致无效区域的背景被擦除。该函数也填入ps结构的字段。BeginPaint传回的值是设备内容句柄,这一传回值通常被保存在叫做hdc的变

5、量中HDC数据型态定义为32位的无正负号整数。然后,程序就可以使用需要设备内容句柄的TextOut等GDI函数。呼叫EndPaint即可释放设备内容句柄。方法二:hdc = GetDC (hwnd) ;使用GDI函数ReleaseDC (hwnd, hdc) ;主要用来处理非WM_PAINT消息处理期间绘制显示区域的某个部分的;主要步骤如下:(1). 得到窗口显示区域的设备内容句柄,可以呼叫GetDC来取得句柄,在使用完后呼叫ReleaseDC;注意:与从BeginPaint传回设备内容句柄不同,GetDC传回的设备内容句柄具有一个剪取矩形,它等于整个显示区域。可以在显示区域的某一部分绘图,而

6、不只是在无效矩形上绘图(如果确实存在无效矩形)。与BeginPaint不同,GetDC不会使任何无效区域变为有效。如果需要使整个显示区域有效,可以呼叫ValidateRect (hwnd, NULL) ;一般可以呼叫GetDC和ReleaseDC来对键盘消息(如在字处理程序中)和鼠标消息(如在画图程序中)作出反应。此时,程序可以立刻根据使用者的键盘或鼠标输入来更新显示区域,而不需要考虑为了窗口的无效区域而使用WM_PAINT消息。不过,一旦确实收到了WM_PAINT消息,程序就必须要收集足够的信息后才能更新显示。与GetDC相似的函数是GetWindowDC。GetDC传回用于写入窗口显示区域

7、的设备内容句柄,而GetWindowDC传回写入整个窗口的设备内容句柄。例如,您的程序可以使用从GetWindowDC传回的设备内容句柄在窗口的标题列上写入文字。然而,程序同样也应该处理WM_NCPAINT (非显示区域绘制)消息下面请看具体的示例(注意,其中的实现窗口部分的代码是重复前面的代码的,以后再说的时候就不全部写了,请大家参考前面的代码)#include math.h#define NUM 1000#define myTWOPI (2*3.14159)LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMai

8、n(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow) static TCHAR szAppName=TEXT(SinWave); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style=CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hbrBackground=(HBRUSH)G

9、etStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.lpszClassName=szAppName; if(!RegisterClass(&wndclass) MessageBox(NULL,TEXT(This program requires Windows NT!),szA

10、ppName,MB_ICONERROR); return 0; hwnd=CreateWindow(szAppName, TEXT(Draw Sine Wave Using Polyline), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, NULL, hInstance, NULL); ShowWindow(hwnd,iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg,NULL,0,0) TranslateMessage(&msg); DispatchMessage(& return msg.wParam;LRE

11、SULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) static int cxClient,cyClient; HDC hdc; int i; PAINTSTRUCT ps; POINT aptNUM; /定义1000组数据 TCHAR szBuffer40; HPEN hPen; switch(message) /处理WM_SIZE消息 case WM_SIZE: cxClient=LOWORD(lParam); cyClient=HIWORD(lParam); case WM_PAINT: hd

12、c=BeginPaint(hwnd,&ps); / TCHAR szBuffer40;注意此行要把szBuffer的定义放在消息处编译理的前面,不然编译会报错的; SetTextColor(hdc,RGB(255,0,0); /设置文字的背景色 SetBkColor(hdc,RGB(0,255,255); /* SetTextColor的MSDN文档 COLORREF SetTextColor( HDC hdc, / handle to device context COLORREF crColor / text color ); COLORREF的文档 When specifying an

13、explicit RGB color, the COLORREF value has the following hexadecimal form: 0x00bbggrr The low-order byte contains a value for the relative intensity of red; the second byte contains a value for green; and the third byte contains a value for blue. The high-order byte must be zero. The maximum value f

14、or a single byte is 0xFF The RGB macro selects a red, green, blue (RGB) color based on the arguments supplied and the color capabilities of the output device. COLORREF RGB( BYTE bRed, / red component of color BYTE bGreen, / green component of color BYTE bBlue / blue component of color COLORREF SetBk

15、Color( HDC hdc, / handle of device context COLORREF crColor / background color value */ TextOut(hdc,20,20,szBuffer, wsprintf(szBuffer,TEXT(luliuyan!) 看看MSDN的文档 int wsprintf( LPTSTR lpOut, / pointer to buffer for output LPCTSTR lpFmt, / pointer to format-control string . / optional arguments 返回的是字符串的

16、长度; BOOL TextOut( int nXStart, / x-coordinate of starting position int nYStart, / y-coordinate of starting position LPCTSTR lpString, / pointer to string int cbString / number of characters in string /创建画笔 hPen=CreatePen(PS_SOLID,3,RGB(255,0,0); /把画笔选入设备环境 SelectObject(hdc,hPen); HPEN CreatePen( int

17、 fnPenStyle, / pen style int nWidth, / pen width COLORREF crColor / pen color /画x方向的横线 MoveToEx(hdc,0,cyClient/2,NULL); LineTo(hdc,cxClient,cyClient/2); /画y方向的横线 MoveToEx(hdc,0,0,NULL); LineTo(hdc,0,cyClient); for(i=0;iNUM;i+) /把横坐标等分成1000个点 apti.x=i*cxClient/NUM; /根据横坐标计算纵坐标 apti.y=(int)(cyClient/2*(1-sin(myTWOPI*i/NUM); Polyline(hdc,apt,NUM); /不要忘了清除画笔对象; DeleteObject(hPen); case WM_DESTROY: PostQuitMessage(0); return DefWindowProc(hwnd,message,wParam,lParam);本文来自CSDN博客,转载请标明出处:

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2