hur.cn - 华软网

 热门搜索

求助,Windows程序设计第五版源代码

  作者:未知    来源:网络    更新时间:2011/4/17
C++">
BITBLT.C
/*---------------------------------------
   BITBLT.C -- BitBlt Demonstration
               (c) Charles Petzold, 1998
  ---------------------------------------*/

#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
     static TCHAR szAppName [] = TEXT ("BitBlt") ;
     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_INFORMATION) ;
     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
     wndclass.lpszMenuName  = NULL ;
     wndclass.lpszClassName = szAppName ;
     
     if (!RegisterClass (&wndclass))
     {
          MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                      szAppName, MB_ICONERROR) ;
          return 0 ;
     }
     
     hwnd = CreateWindow (szAppName, TEXT ("BitBlt 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)
{
     static int  cxClient, cyClient, cxSource, cySource ;
     HDC         hdcClient, hdcWindow ;
     int         x, y ;
     PAINTSTRUCT ps ;
     
     switch (message)
     {
     case WM_CREATE:
          cxSource = GetSystemMetrics (SM_CXSIZEFRAME) +
                     GetSystemMetrics (SM_CXSIZE) ;

          cySource = GetSystemMetrics (SM_CYSIZEFRAME) + 
                     GetSystemMetrics (SM_CYCAPTION) ;
          return 0 ;

     case WM_SIZE:
          cxClient = LOWORD (lParam) ;
          cyClient = HIWORD (lParam) ;
          return 0 ;

     case WM_PAINT:
          hdcClient = BeginPaint (hwnd, &ps) ;
          hdcWindow = GetWindowDC (hwnd) ;

          for (y = 0 ; y < cyClient ; y += cySource)
          for (x = 0 ; x < cxClient ; x += cxSource)
          {
               BitBlt (hdcClient, x, y, cxSource, cySource,
                       hdcWindow, 0, 0, SRCCOPY) ;
          }

          ReleaseDC (hwnd, hdcWindow) ;
          EndPaint (hwnd, &ps) ;
          return 0 ;
     case WM_DESTROY:
          PostQuitMessage (0) ;
          return 0 ;
     }
     return DefWindowProc (hwnd, message, wParam, lParam) ;
}



这是书上源码,完全一样,照理说应该显示窗口左上角的图标,书上也是这个效果,可是为什么我用VS2008运行时,总是显示的总是窗口下面的编译器上的某个地方的图?
请指教!
---华软 网友回答---
GetWindowDC 本来想加颜色的,结果失利了,前后都有color,拷贝代码时请注意
---华软网友回复---
BitBlt (hdcClient, x, y, cxSource, cySource,
                       hdcWindow, 0, 0, SRCCOPY) ;
======================================================
有误,你往 客户区贴图了。
---华软网友回复---
哦,看错了,你现在神马情况。
---华软网友回复---
引用 3 楼 xuddk727 的回复:
哦,看错了,你现在神马情况。

情况就是本来应该显示窗口左上角的图标,书上也是这么说的,但显示的却是vs2008某个部份的图,书上的代码拷贝的,完全一样啊
---华软网友回复---
我在VC6中运行了
就是满屏都显示左上角题目栏的那个截图啊
---华软网友回复---
引用 5 楼 king_hhuang 的回复:
我在VC6中运行了
就是满屏都显示左上角题目栏的那个截图啊

可是我在vs2008里满屏都是vs2008上的某个图啊,也就是说我的窗口题目在vs2008的哪一个部份上面,就显示哪一个部份...我是win7..
---华软网友回复---
我的是XP+VC6
显示的是系统信息那个图吧,就是那个白色的"i"
---华软网友回复---
引用 7 楼 king_hhuang 的回复:
我的是XP+VC6
显示的是系统信息那个图吧,就是那个白色的"i"

我显示的是这样的,比如窗口在vs2008菜单上面,就显示的比如 “资料”之类的,在其余区域,就显示的是其余区域的文字,比如 “反汇编” 之类的
---华软网友回复---
显示的应该是这个图标
wndclass.hIcon         = LoadIcon (NULL, IDI_INFORMATION) ;


难道你Win7下面的IDI_INFORMATION图标没有?
---华软网友回复---
我在VS08下尝试过了,显示的是窗口左上角的图标,没遇到你所说的那个,你的什么情况?再检查一下?
---华软网友回复---
引用 10 楼 yiruirui0507 的回复:
我在VS08下尝试过了,显示的是窗口左上角的图标,没遇到你所说的那个,你的什么情况?再检查一下?

完全拷贝的windows程序设计第五版...


话说怎么贴图?我贴个图来
---华软网友回复---
引用 9 楼 king_hhuang 的回复:
显示的应该是这个图标
wndclass.hIcon = LoadIcon (NULL, IDI_INFORMATION) ;


难道你Win7下面的IDI_INFORMATION图标没有?


换成IDI_APPLICATION也不行~
---华软网友回复---
我也遇到这个问题 我觉得应该是 映照问题,应为里面用的都是逻辑坐标可能映照到设备坐标上出现了误差
---华软网友回复---
你先看下getwindowdc是否成功了,或简单尝试下 getwindowdc(NULL)看是否获得系统左上角。
另也有可能是系统的缘故,究竟没WIN7上尝试过。
---华软网友回复---
总共也就那么几行代码,每一个值都调试下。
---华软网友回复---
WIN7 总是问题多~~~~也可能是WIN7 做了系统掩护吧!!!有的函数调用需要管理员权限~~~      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。