请教大家一个问题,要在我的子窗口控件中贴一张图片,为什么没贴上?下面是代码
        case  WM_PAINT:
              hdc = BeginPaint (p->WndMyButtons0, &Paint) ;
                hBitmap = LoadBitmap(p->Win.Module,TEXT( "sun.bmp"));
          GetObject (hBitmap, sizeof (BITMAP), &bitmap) ;
              cxBitmap = bitmap.bmWidth ;
              cyBitmap = bitmap.bmHeight ;
         hMemDC = CreateCompatibleDC(hdc);
         hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
              BitBlt (hdc, 0, 0, cxBitmap, cyBitmap, 
                hMemDC, 0, 0, SRCCOPY) ;
        
           SelectObject(hMemDC,hOldBitmap);
          DeleteDC (hdc) ;
          DeleteDC (hMemDC) ;
                  EndPaint (p->WndMyButtons0, &Paint) ;          
                return 0;
    case WM_DESTROY:
          DeleteObject (hBitmap) ;
          DeleteObject (hOldBitmap) ;
          PostQuitMessage (0) ;
          return 0 ; 

解决方案 »

  1.   

    什么控件?有些根本不响应WM_PAINT,如按钮类.看看的你的控件有WM_PAINT消息
      

  2.   

    楼上的大侠,能不能再提示一下啊?
    我是BS_OWNERDRAW属性的,这个应该没问题吧?下面是创建窗口的全部代码.
    WNDCLASS WinClass; memset(&WinClass,0,sizeof(WinClass));
    WinClass.style = CS_HREDRAW | CS_VREDRAW;
    WinClass.lpfnWndProc = (WNDPROC) MyButtonsProc0;
    WinClass.cbClsExtra = 0;
    WinClass.cbWndExtra = 0;
    WinClass.hInstance = p->Win.Module;
    WinClass.hCursor = WinCursorArrow();
    WinClass.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
    WinClass.lpszMenuName = 0;
    WinClass.lpszClassName = T("MyButtonBar");
    RegisterClass(&WinClass);
             
    p->WndMyButtons0  = CreateWindowEx( 
    0,                    
    WinClass.lpszClassName,       
    T("MyButton"),   
    WS_CHILD | WS_VISIBLE |BS_OWNERDRAW, 
    // 10, 22,    
    // 30, 30,   
                  CW_USEDEFAULT, CW_USEDEFAULT,
                         CW_USEDEFAULT, CW_USEDEFAULT,
    p->Win.Wnd,
    NULL,//(HMENU) ,
    p->Win.Module,                     
    NULL                      
    );
      

  3.   

    DeleteDC (hdc) ;
    改成
    DeleteDC (hBitmap) ;
    试试看
      

  4.   

    hBitmap = LoadBitmap(p->Win.Module,TEXT( "sun.bmp"));
    上面这句出问题的可能性比较大. 建议用较一般的写法"
    CBitmap bitmap;
    bitmap.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
    你先把位图导入资源后,试试
      

  5.   

    参考:
    g_skin_bmp = (HBITMAP)LoadImage(hInstance,MAKEINTRESOURCE(IDB_skin),IMAGE_BITMAP,0,0,0);if(g_skin_bmp==NULL)   return false;case WM_PAINT:{ hdc = BeginPaint(hWnd, &ps); // TODO: 在此添加任意绘图代码... //<-绘制皮肤-------------------------------------------------------> HDC hSrcDC = CreateCompatibleDC(NULL); SelectObject(hSrcDC,g_skin_bmp); BitBlt(hdc, 0, 0, g_nBmpW, g_nBmpH, hSrcDC, 0, 0, SRCCOPY); DeleteDC(hSrcDC); //<----------------------------------------------------------------> EndPaint(hWnd, &ps); break;}
      

  6.   

    用vc做了一个小程序,通过断点发现,是位图没有加载成功....,楼上的老大说的不错,不过我是用sdk,没有那个类,成员函数的参数也不一样,想改成loadimage 看看
      

  7.   

    在vc下成功了,不过我的是移植到evc下的,在那下面不成功,郁闷...
    用这句就可以了
     hBitmap = LoadBitmap(((LPCREATESTRUCT) lParam)->hInstance, MAKEINTRESOURCE(IDB_PINERY1));