getDC

  1 // 01WM_PAINT与GetDC.cpp : 定义应用程序的入口点。
  2 //
  3
  4 #include "stdafx.h"
  5 #include "01WM_PAINT与GetDC.h"
  6
  7 #define MAX_LOADSTRING 100
  8
  9 #define MYBUTTON1  10001
 10
 11 #define MYBUTTON2  10002
 12
 13 #define MYBUTTON3  10003
 14 // 全局变量:
 15 HINSTANCE hInst;                                // 当前实例
 16 TCHAR szTitle[MAX_LOADSTRING];                    // 标题栏文本
 17 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
 18
 19 // 此代码模块中包含的函数的前向声明:
 20 ATOM                MyRegisterClass(HINSTANCE hInstance);
 21 BOOL                InitInstance(HINSTANCE, int);
 22 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 23 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 24
 25 int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
 26                      _In_opt_ HINSTANCE hPrevInstance,
 27                      _In_ LPTSTR    lpCmdLine,
 28                      _In_ int       nCmdShow)
 29 {
 30     UNREFERENCED_PARAMETER(hPrevInstance);
 31     UNREFERENCED_PARAMETER(lpCmdLine);
 32
 33      // TODO:  在此放置代码。
 34     MSG msg;
 35     HACCEL hAccelTable;
 36
 37     // 初始化全局字符串
 38     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 39     LoadString(hInstance, IDC_MY01WM_PAINTGETDC, szWindowClass, MAX_LOADSTRING);
 40     MyRegisterClass(hInstance);
 41
 42     // 执行应用程序初始化:
 43     if (!InitInstance (hInstance, nCmdShow))
 44     {
 45         return FALSE;
 46     }
 47
 48     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY01WM_PAINTGETDC));
 49
 50     // 主消息循环:
 51     while (GetMessage(&msg, NULL, 0, 0))
 52     {
 53         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
 54         {
 55             TranslateMessage(&msg);
 56             DispatchMessage(&msg);
 57         }
 58     }
 59
 60     return (int) msg.wParam;
 61 }
 62
 63
 64
 65 //
 66 //  函数:  MyRegisterClass()
 67 //
 68 //  目的:  注册窗口类。
 69 //
 70 ATOM MyRegisterClass(HINSTANCE hInstance)
 71 {
 72     WNDCLASSEX wcex;
 73
 74     wcex.cbSize = sizeof(WNDCLASSEX);
 75
 76     wcex.style            = CS_HREDRAW | CS_VREDRAW;
 77     wcex.lpfnWndProc    = WndProc;
 78     wcex.cbClsExtra        = 0;
 79     wcex.cbWndExtra        = 0;
 80     wcex.hInstance        = hInstance;
 81     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY01WM_PAINTGETDC));
 82     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
 83     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
 84     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_MY01WM_PAINTGETDC);
 85     wcex.lpszClassName    = szWindowClass;
 86     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 87
 88     return RegisterClassEx(&wcex);
 89 }
 90
 91 //
 92 //   函数:  InitInstance(HINSTANCE, int)
 93 //
 94 //   目的:  保存实例句柄并创建主窗口
 95 //
 96 //   注释:
 97 //
 98 //        在此函数中,我们在全局变量中保存实例句柄并
 99 //        创建和显示主程序窗口。
100 //
101 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
102 {
103    HWND hWnd;
104
105    hInst = hInstance; // 将实例句柄存储在全局变量中
106
107    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
108       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
109
110    if (!hWnd)
111    {
112       return FALSE;
113    }
114
115    ShowWindow(hWnd, nCmdShow);
116    UpdateWindow(hWnd);
117
118    return TRUE;
119 }
120
121 //
122 //  函数:  WndProc(HWND, UINT, WPARAM, LPARAM)
123 //
124 //  目的:    处理主窗口的消息。
125 //
126 //  WM_COMMAND    - 处理应用程序菜单
127 //  WM_PAINT    - 绘制主窗口
128 //  WM_DESTROY    - 发送退出消息并返回
129 //
130 //
131 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
132 {
133     int wmId, wmEvent;
134     PAINTSTRUCT ps;
135     HDC hdc;
136     static int nNum = 10;
137     switch (message)
138     {
139     case  WM_CREATE:
140         //创建按钮用于GetDC()
141         CreateWindow(
142             TEXT("button"),
143             TEXT("hehe"),
144             WS_VISIBLE | WS_CHILD,
145             50, 50, 60, 30, hWnd,
146             (HMENU)MYBUTTON1,
147             hInst,
148             NULL);
149         //创建按钮用于GetWindowDC()
150         CreateWindow(
151             TEXT("button"),
152             TEXT("hehe"),
153             WS_VISIBLE | WS_CHILD,
154             120, 50, 60, 30, hWnd,
155             (HMENU)MYBUTTON2,
156             hInst,
157             NULL);
158         CreateWindow(
159             TEXT("button"),
160             TEXT("hehe"),
161             WS_VISIBLE | WS_CHILD,
162             190, 50, 60, 30, hWnd,
163             (HMENU)MYBUTTON3,
164             hInst,
165             NULL);
166
167     case WM_COMMAND:
168         wmId    = LOWORD(wParam);
169         wmEvent = HIWORD(wParam);
170         // 分析菜单选择:
171         switch (wmId)
172         {
173         case  MYBUTTON1:
174         {
175             HDC hDc = GetDC(NULL);
176             TextOut(hDc, 0, 0, TEXT("15PB"), 4);
177             ReleaseDC(hWnd, hDc);
178         }
179             break;
180         case MYBUTTON2:
181         {
182             HDC hDc = GetWindowDC(hWnd);
183             TextOut(hDc, 0, 20, TEXT("15PB"), 4);
184         }
185             break;
186         case  MYBUTTON3:
187         {
188             HDC hDc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
189             TextOut(hDc, 100, 100, TEXT("15PB"), 4);
190         }
191         default:
192             return DefWindowProc(hWnd, message, wParam, lParam);
193         }
194         break;
195     case WM_PAINT:
196     {
197         hdc = BeginPaint(hWnd, &ps);
198         // TODO:  在此添加任意绘图代码...
199         //用以验证有效区域和无效区域
200         nNum++;
201         TCHAR buf[20] = {};
202         _stprintf_s(buf, 20, TEXT("%d"), nNum);
203         TextOut(hdc, 100, 100, buf, _tcsclen(buf));
204         EndPaint(hWnd, &ps);
205         break;
206     }
207     case WM_NCPAINT:
208     {
209 //         HDC hdc;
210 //         hdc = GetDCEx(hWnd, (HRGN)wParam, DCX_WINDOW | DCX_INTERSECTRGN);
211 //         TextOut(hdc, 0, 0, TEXT("15PB"), 4);
212 //         ReleaseDC(hWnd, hdc);
213         return DefWindowProc(hWnd, message, wParam, lParam);
214         break;
215     }
216     case WM_DESTROY:
217         PostQuitMessage(0);
218         break;
219     default:
220         return DefWindowProc(hWnd, message, wParam, lParam);
221     }
222     return 0;
223 }
224
225 // “关于”框的消息处理程序。
226 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
227 {
228     UNREFERENCED_PARAMETER(lParam);
229     switch (message)
230     {
231     case WM_INITDIALOG:
232         return (INT_PTR)TRUE;
233
234     case WM_COMMAND:
235         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
236         {
237             EndDialog(hDlg, LOWORD(wParam));
238             return (INT_PTR)TRUE;
239         }
240         break;
241     }
242     return (INT_PTR)FALSE;
243 }
时间: 2024-09-30 15:06:42

getDC的相关文章

VB API第一课GetDC的调用

函数功能: GetDC 函数用户获得指定窗口的客户区或整个屏幕的设备环境句柄,随后,你可以在 GDI 函数中使用该句柄在设备环境中绘图. 设备环境是一个不公开的数据结构,它的值供 GDI 函数内部使用. 获取设备的句柄调用GetDC,首先申明 Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long 参数解析: 参数 含义 hWnd 1. 指定的窗口句柄2. 如果该值是 NULL,获得整个屏幕的设备

BeginPaint 和 GetDC 的一个区别

这个问题是在做9*9乘法表这个课后习题发现的-- 先给出我的结论:注意在 WM_PAINT 下不要使用hdc = GetDC(hwnd)的方式,因为这样会不停的触发WM_PAINT消息! 东西看上去就会闪烁!! LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; int i,j=1,x,y = 0; TCHAR s

告诉你GetDC()没有释放造成的后果

最近做的项目中需要显示视频监控窗口,从采集卡中读到图像的数据,需要实时显示出来,而且速度比较快. 由于比较简单,就直接使用了GDI画图,以前复杂的都用openGL啥的工具了,这次这个简单,就直接用GDI了. 先获取DC,然后画图 pDC = this ->GetDC(); // 获得显示控件的 DC this->GetClientRect(rect); MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画 ^_^ //下面建立一个与屏幕显示兼容的位

[00012]-[2015-08-27]-[00]-[Windows 程序设计 ---GetWindowDC GetWindowRect GetClientDC(GetDC) GetClientRect]

::GetWindowDC(m_hWnd); // 表示GetWindowDC()是一个全局函数,作用域大 GetWindowDC() 获得的设备环境覆盖了整个窗口(包括非客户区),例如标题栏.菜单.滚动条,以及边框 GetWindowRect() rect表示应用程序窗口在屏幕中的位置rigth left top bottom GetDC() 获取的是应用程序中客户区的环境设备 GetClientRect() rect表示应用程序客户区的rect. left right top bottom

内存泄漏,当您使用的 GetDC 方法和 ReleaseDC 方法 CWnd 类版本

重现行为的步骤 是从 CWnd 派生的类的一个方法中插入下面的代码在您的应用程序中: CDC *pDC; RECT rect; GetClientRect (&rect); for (int i = 0; i < 1000; i++) { pDC = GetDC (); ReleaseDC (pDC); } 如果运行此代码,并且之前和之后运行该代码然后检查系统内存您注意到系统内存泄漏每次迭代的四个字节. 如果您以下面的代码更改该代码,内存泄漏不会发生: HDC hDC; RECT rect;

MFC程序设计中的BeginPaint/EndPaint和GetDC/ReleaseDC的使用

1. 绘图/写字一般在WM_PAINT消息中处理.而在响应WM_PAINT消息时,需要成对调用下面两个接口: HDC BeginPaint(_In_  HWND hwnd, _Out_  LPPAINTSTRUCT lpPaint); BOOL EndPaint(_In_  HWND hWnd, _In_  const PAINTSTRUCT *lpPaint); (1)BeginPaint只重画需要更新的区域(称为“无效区域”).(2)更新区域由Invalidate,InvalidateRec

VC中显示ICON和BMP图片

显示ICON图标,如下: static HICON hIcon  = (HICON)::LoadImage(       AfxGetInstanceHandle(),        TEXT("1.ico"),       IMAGE_ICON,       0, 0,       LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE);          CClientDC dc(this);       dc.DrawIc

outdated: 27.Shadows

这次的代码没有按照辅导代码中的来. VK_LEFT/VK_RIGHT/VK_UP/VK_DOWN控制长方体旋转,W/S/A/D/Q/E控制球移动,小键盘的8/5/4/6/7/9控制长方体移动,I/K/J/L/U/O控制光源移动. 在InitGLObject()函数中使用到的readObject()函数.setConnectivity()函数和calculatePlane()函数在3object.h中所写. readObject()函数在.txt文件中读取物体顶点数.顶点坐标.平面数.vertex

Windows应用程序

  Windows应用程序是由一系列的消息处理 代码来实现的.这和传统的过程式编程方法很不一样,编程者只能够 预测用户所利用应用程序用户界面对象所进行的操作以及为这些操作 编写处理代码,却不可以这些操作在什么时候发生或者是以什么顺序 来发生,也就是说,我们不可能知道什么消息会在什么时候以什么顺 序来临. Windows应用程序基本流程:   Windows API:(windowsAppliacation Programming Interface. Windows 应用程序编程接口), API