VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 540|回复: 1

Getwindowdc和Bitblt()

[复制链接]
91_avatar_middle
最佳答案
0 
donate_vip 发表于 2022-3-2 18:23:03 | 显示全部楼层 |阅读模式
  1. #include <windows.h>

  2. LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

  3. int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
  4.                     PSTR szCmdLine, int iCmdShow)
  5. {
  6.      static TCHAR szAppName [] = TEXT ("BitBlt") ;
  7.      HWND         hwnd ;
  8.      MSG          msg ;
  9.      WNDCLASS     wndclass ;

  10.      wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
  11.      wndclass.lpfnWndProc   = WndProc ;
  12.      wndclass.cbClsExtra    = 0 ;
  13.      wndclass.cbWndExtra    = 0 ;
  14.      wndclass.hInstance     = hInstance ;
  15.      wndclass.hIcon         = LoadIcon (NULL, IDI_INFORMATION) ;
  16.      wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
  17.      wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
  18.      wndclass.lpszMenuName  = NULL ;
  19.      wndclass.lpszClassName = szAppName ;
  20.      
  21.      if (!RegisterClass (&wndclass))
  22.      {
  23.           MessageBox (NULL, TEXT ("This program requires Windows NT!"),
  24.                       szAppName, MB_ICONERROR) ;
  25.           return 0 ;
  26.      }
  27.      
  28.      hwnd = CreateWindow (szAppName, TEXT ("BitBlt Demo"),
  29.                           WS_OVERLAPPEDWINDOW,
  30.                           CW_USEDEFAULT, CW_USEDEFAULT,
  31.                           CW_USEDEFAULT, CW_USEDEFAULT,
  32.                           NULL, NULL, hInstance, NULL) ;

  33.      ShowWindow (hwnd, iCmdShow) ;
  34.      UpdateWindow (hwnd) ;

  35.      while (GetMessage (&msg, NULL, 0, 0))
  36.      {
  37.           TranslateMessage (&msg) ;
  38.           DispatchMessage (&msg) ;
  39.      }
  40.      return msg.wParam ;
  41. }

  42. LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  43. {
  44.      static int  cxClient, cyClient, cxSource, cySource ;
  45.      HDC         hdcClient, hdcWindow ;
  46.      int         x, y ;
  47.      PAINTSTRUCT ps ;
  48.      //WM_NCCREATE  当某个窗口第一次被创建时,此消息在WM_CREATE消息被发送前发送
  49.      //WM_GETMINMAXINF 当窗口要将要改变大小或位置时,发送此消息给该窗口 CreateWindow第一条消息
  50.      switch (message)
  51.      {
  52.      case WM_CREATE:
  53.           cxSource = GetSystemMetrics (SM_CXSIZEFRAME) +
  54.                      GetSystemMetrics (SM_CXSIZE) ;

  55.           cySource = GetSystemMetrics (SM_CYSIZEFRAME) +
  56.                      GetSystemMetrics (SM_CYCAPTION) ;
  57.           return 0 ;

  58.      case WM_SIZE:
  59.           cxClient = LOWORD (lParam) ;
  60.           cyClient = HIWORD (lParam) ;
  61.           return 0 ;

  62.      case WM_PAINT:
  63.           hdcClient = BeginPaint (hwnd, &ps) ;
  64.           hdcWindow = GetWindowDC (hwnd) ;

  65.           for (y = 0 ; y < cyClient ; y += cySource)
  66.           for (x = 0 ; x < cxClient ; x += cxSource)
  67.           {
  68.                BitBlt (hdcClient, x, y, cxSource, cySource,
  69.                        hdcWindow, 0, 0, SRCCOPY) ;
  70.           }

  71.           ReleaseDC (hwnd, hdcWindow) ;
  72.           EndPaint (hwnd, &ps) ;
  73.           return 0 ;

  74.      case WM_DESTROY:
  75.           PostQuitMessage (0) ;
  76.           return 0 ;
  77.      }
  78.      return DefWindowProc (hwnd, message, wParam, lParam) ;
  79. }
复制代码
Getwindowdc和Bitblt() 以上是运行效果,我本想做的是把那个窗口的图标复制到该窗口的客户区(复制很多个),结果发现没有做到。我实现的思路是通过getwindowdc()函数,传入该窗口句柄,然后得到包含客户区与非客户区的hdc_1,然后调用getdc()函数,传入窗口句柄,得到包含客户区的hdc_2,然后把hdc_1的内容复制到hdc里面去。但结果发现即使我给getwindowdc()传入窗口句柄,却还是得到的是屏幕DC,却不是包含客户区与非客户区的窗口dc(从效果得知屏幕DC,MSDN未说明)。这是什么原因了?请各位大佬和老师指教下




上一篇:关于MFC的sheet和page的问题
下一篇:大佬们,想问一下FindClose()函数和CloseHandle()函数之间的区别
51_avatar_middle
最佳答案
90 
online_admins 发表于 2022-3-2 19:57:43 | 显示全部楼层
没太明白楼主什么意思?客户区与非客户区DC,屏幕DC?还是没明白楼主要问什么
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-10-1 04:59

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表