做过Win32 API程序的就会发现,要对窗口输出时,每次都要获取设备描述表句柄;都是对同一个窗口输出,设备描述表是一个;为什么每次都要获取设备描述表句柄呢?获取一次行吗?

做一个Win32 API程序,获取多次设备描述表句柄;递增Y坐标,输出设备描述表句柄的值;

/*-------------------------------------------------hdcDemo.C -- bobo, 2019.12.27-------------------------------------------------*/#include <windows.h>
#include <windowsx.h>LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int         x=200, y;int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR  szCmdLine, int iCmdShow)
{static TCHAR szAppName[] = TEXT ("hdcDemo1") ;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)){MessageBox (NULL, TEXT ("Program requires Windows NT!"), szAppName, MB_ICONERROR) ;return 0 ;}hwnd = CreateWindow (szAppName, TEXT ("hdc Demo"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT,NULL, NULL, hInstance, NULL) ;ShowWindow (hwnd, iCmdShow) ;UpdateWindow (hwnd) ;while (GetMessage (&msg, NULL, 0, 0)){TranslateMessage (&msg) ;DispatchMessage (&msg) ;}return msg.wParam ;
}LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC         hdc ;     PAINTSTRUCT ps ;RECT        rect ;char buffer[65];switch (message){case WM_CREATE:y=130;return 0;case WM_SIZE :return 0 ;case WM_RBUTTONDOWN :hdc=GetDC(hwnd);itoa(hdc,buffer,10);TextOut(hdc,100,y,buffer,9);y=y+30;return 0;case WM_LBUTTONDOWN :hdc=GetDC(hwnd);itoa(hdc,buffer,10);TextOut(hdc,100,100,buffer,9);return 0 ;case WM_PAINT :hdc = BeginPaint (hwnd, &ps) ;hdc=GetDC(hwnd);itoa(hdc,buffer,10);TextOut(hdc,x,y,buffer,9);          EndPaint (hwnd, &ps) ;y=y+30;return 0 ;case WM_DESTROY :PostQuitMessage (0) ;return 0 ;}return DefWindowProc (hwnd, message, wParam, lParam) ;
}

根据目前我看到的情况;在同一次进入窗口过程,获取2次设备描述表句柄,第二次获取的值是负值,无效的;如果每次进入窗口过程,获取设备描述表句柄,返回的句柄值是不同的;

所以需要每次获取;

目前我认为每次变换设备描述表句柄值,是Windows的保护机制之一;防止人通过设备描述表句柄,跟踪进设备描述表内部,了解到相关设计机制;

纯 Win32 SDK程序为什么每次要获取设备描述表句柄相关推荐

  1. 一个使用纯Win32 SDK和C语言实现的五子棋游戏

    引言:GobangGame 这是一个使用纯Win32 SDK和C语言实现的五子棋游戏 在这个游戏中实现的功能 [x] 绘制一个15 * 15的棋盘 [x] 绘制5个着重点位置 [x] 根据鼠标左键的点 ...

  2. C++ 纯WIN32 API编程 悦读器实战示例

    /* 最后修改:2020-09-21 14:04 <C++编程示例大全> 作者:张国鹏 本例功能:C++ 纯WIN32 API编程 悦读器实战示例 软件下载:http://lovegp.c ...

  3. 使用纯C语言开始win32 sdk编程

    使用纯C语言开始win32 sdk编程 今天开始加强用c语言进行win32 sdk编程的训练,不为别的,只为进一步加强自己对代码的感觉,加强快速写出正确代码的能力.因为c是如些地具有挑战性而灵活的语言 ...

  4. 第一个Win32 SDK应用程序

    #include<windows.h>int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int);LRESULT WINAPI WndProc(HW ...

  5. Windows游戏设计(二)- 打砖块游戏 - 使用Win32 SDK

    注:以下内容为学习笔记,多数是从书本.资料中得来,只为加深印象,及日后参考.然而本人表达能力较差,写的不好.因非翻译.非转载,只好选原创,但多数乃摘抄,实为惭愧.但若能帮助一二访客,幸甚! 前一阵子学 ...

  6. Windows API入门系列之五 -一个正儿八经的SDK程序

    上一篇,讲了一个简单的SDK程序的多种版本的编写,弹出了一个窗口,显示了我们计算1到10的结果,计算的程序不是重点,重点在于,一:让大家认识到Unicode版本的程序和ASCII版本的程序在编程方面的 ...

  7. Win32应用程序开发:完整的开发流程

    上一篇中我给各位说了一般人认为C++中较为难的东西--指针.其实对于C++,难点当然不局限在指针这玩意儿上,还有一些有趣的概念,如模板类.虚基类.纯虚函数等,这些都是概念性的东西,几乎每一本C++书上 ...

  8. API入门系列之五 -一个正儿八经的SDK程序

    原创文章,转载请注明作者及出处. 首发 http://blog.csdn.net/beyondcode http://www.cnblogs.com/beyond-code/ http://hi.ba ...

  9. c语言劫持dll写法,[原创]DLL劫持生成器 源码开放(纯WINDOWS SDK)+ 实例分析

    本菜最近学习了什么DLL注入啊,hook啊(r3)的相关技术,觉得很好玩,于是深入发现还有DLL劫持这种东西觉得挺好玩的,加上最近看到各种木马分析报告中都还有发现有利用白加黑的现象.于是自己想找几个来 ...

最新文章

  1. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)
  2. 独家 | 使用机器学习对非结构化数据加速查询-第2部分(具有统计保证的近似选择查询)...
  3. 干货合集 | 带你深入浅出理解深度学习(附资源打包下载)
  4. 二进制补码求值用c语言,C语言程序设计第2章数据类型.运算符与表达式.ppt
  5. .net框架、CLR和C#的版本之间的对应关系
  6. 7-n!末尾有几个0
  7. python 制作抽奖箱_用Excel函数制作抽奖箱
  8. FLASH得到MYSQL数据
  9. 关于在asp.net中的调试
  10. LoadRunner11完美破解
  11. 【密码学原理】密钥管理和分发——对称密钥分发
  12. Post man 使用教程
  13. 「Odoo 基础教程系列」第七篇——从 Todo 应用开始(6)
  14. matlab分析启动子特征,文献编译 | 相对脑血容量(rCBV)可作为MGMT启动子甲基化阳性GBM的辅助预后指标...
  15. C++线程池原理及创建
  16. 亲情的矛盾都是因为爱而化解 写给17 岁的你
  17. ESP32产品系列之智能插座(一),框架及硬件设计
  18. 歪门邪道?新技术让智能手机可窃取附近键盘输入信息
  19. Cardboard Talk01 HeadTracker
  20. 数据分析中,文本分析远比数值型分析重要!(上)

热门文章

  1. ccf权限查询java_201612-3 ccf 权限查询
  2. java冒泡排序_Java冒泡排序,鸡尾酒排序
  3. v-for遍历数组 || v-for遍历对象
  4. 学习jQuery顺便学习下CSS选择器:奇偶匹配nth-child(even)
  5. Python 空字符串转化问题:ValueError: invalid literal for int() with base 10: ' ',原因及解决方法。
  6. 模拟电路技术之基础知识(七)
  7. CTFshow php特性 web140
  8. CTFshow 命令执行 web77
  9. 回流,重绘的概念,以及他们的区别?
  10. Mac安装python3的opencv包