Winapi 为什么BitBlt在不同的地方有不同的结果

Winapi 为什么BitBlt在不同的地方有不同的结果,winapi,bitblt,Winapi,Bitblt,我为BitBlt编写了一个测试样本,在WinProc中,WM_绘制会这样做:它会重复从窗口(0,0)到客户端区域绘制小块 case WM_CREATE:{ cxSource = GetSystemMetrics (SM_CXSIZEFRAME) + GetSystemMetrics (SM_CXSIZE) ; cySource = GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_

我为BitBlt编写了一个测试样本,在WinProc中,WM_绘制会这样做:它会重复从窗口(0,0)到客户端区域绘制小块

      case WM_CREATE:{
          cxSource = GetSystemMetrics (SM_CXSIZEFRAME) + GetSystemMetrics (SM_CXSIZE) ;
          cySource = GetSystemMetrics (SM_CYSIZEFRAME) + GetSystemMetrics (SM_CYCAPTION) ;
          return 0 ;

      case WM_PAINT:
          hdcClient = BeginPaint (hwnd, &ps) ;
          hdcWindow = GetWindowDC (hwnd) ;
          RECT rcClient; 
          GetClientRect(hwnd, &rcClient);
          for (y = 0 ; y < rcClient.bottom ; y += cySource)
              for (x = 0 ; x < rcClient.right ; x += cxSource)
                  BitBlt (hdcClient, x, y, cxSource, cySource, hdcWindow, 0, 0, SRCCOPY) ;

          ReleaseDC (hwnd, hdcWindow) ;
          EndPaint (hwnd, &ps) ;
          return 0;
case WM\u创建:{
cxSource=GetSystemMetrics(SM_cxSizeName)+GetSystemMetrics(SM_CXSIZE);
cySource=GetSystemMetrics(SM_CYSIZEFRAME)+GetSystemMetrics(SM_cyccaption);
返回0;
案例WM_油漆:
hdcClient=开始喷漆(hwnd和ps);
hdcWindow=GetWindowDC(hwnd);
RECT-rcClient;
GetClientRect(hwnd和rcClient);
对于(y=0;y
但是如果我写一个函数做同样的事情并标记上面的代码,结果就是一幅大图,有人能告诉我为什么吗

此示例来自编程windows CH14 BitBlt项目,我对其进行了一些修改。项目目标是使用窗口中的小模式(0,0,cxSource,cySource)填充客户端区域,但如果我在另一个函数中编写此示例,结果是,只有一个大画面。
提前感谢。

cxSource和cySource是在哪里定义的?代码标记的哪一部分?在同一个窗口的Windows和客户端DC之间以循环方式进行blitting有什么实际问题?Roman,这段代码是对的。目标是使用Windows中的小模式(0,0,cxSource,cySource)要填充客户端区域,它是一个随机图像生成器,复制窗口的未初始化部分。您可以获得窗口左上角下方的任何内容。尝试猜测要执行的操作是不可能的。我的意思是,如果当我在另一个地方写作时,我得到了各种不同的结果。有时我一直一无所获。