关于stretchblt按钮贴图有关问题

关于stretchblt按钮贴图问题
为什么用stretchblt贴上去的图显示不出来,我是个新手,有哪位高人可以指出下哪出问题了么,这问题困扰我很久了
谢谢



#include "resource.h"
#include <windows.h>
#include <cstdio>
HINSTANCE hlnst;
INT_PTR CALLBACK dlgproc(HWND hdlg,UINT umsg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
MSG msg;
hlnst=hInstance;
HWND hdlgnd=CreateDialog(hInstance,(LPCSTR)IDD_MAINDIALOG,NULL,(DLGPROC)dlgproc);
ShowWindow(hdlgnd,nShowCmd);
UpdateWindow(hdlgnd);

while (GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}

INT_PTR CALLBACK dlgproc(HWND hdlg,UINT umsg,WPARAM wparam,LPARAM lparam)
{
HBITMAP hbit;
BITMAP bitinfo;
RECT recbtn;
HDC hdcbtn;
HDC hdcsue;
LPDRAWITEMSTRUCT lpd;
switch (umsg)
{
case WM_INITDIALOG:
hbit=LoadBitmap(hlnst,MAKEINTRESOURCE(IDB_BIT));
GetObject(hbit,sizeof(BITMAP),&bitinfo);
break;


case WM_DRAWITEM:
lpd=(LPDRAWITEMSTRUCT)lparam;
hdcbtn=lpd->hDC;
recbtn=lpd->rcItem;
hdcsue=CreateCompatibleDC(hdcbtn);

if (lpd->CtlID==IDB_DRAW)
{
StretchBlt(hdcbtn,0,0,(recbtn.right-recbtn.left),
(recbtn.top-recbtn.bottom),hdcsue,0,0,
bitinfo.bmWidth,bitinfo.bmHeight,SRCCOPY);
}

if (lpd->CtlID==IDB_BTN)
{
FillRect(hdcbtn,&recbtn,CreateSolidBrush(RGB(12,145,214)));

}
break;



case WM_CLOSE:
DestroyWindow(hdlg);
break;

case WM_DESTROY:
PostQuitMessage(0);
break;
}


return FALSE;
}

------解决方案--------------------
你的IDB_DRAW和IDB_BTN关联的Button控件勾上Owner draw属性
C/C++ code

#include "stdafx.h"
#include "resource.h"

#include <windows.h>
#include <stdio.h>
HINSTANCE hlnst;

INT_PTR CALLBACK dlgproc(HWND hdlg,UINT umsg,WPARAM wparam,LPARAM lparam);
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
    MSG msg;
    hlnst=hInstance;
    HWND hdlgnd=CreateDialog(hInstance,(LPCSTR)IDD_MAINDIALOG,NULL,(DLGPROC)dlgproc);
    ShowWindow(hdlgnd,nShowCmd);
    UpdateWindow(hdlgnd);
    
    while (GetMessage(&msg,0,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}

INT_PTR CALLBACK dlgproc(HWND hdlg,UINT umsg,WPARAM wparam,LPARAM lparam)
{
    static HBITMAP hbit;
    static BITMAP bitinfo;
    RECT recbtn;
    HDC hdcbtn;
    HDC hdcsue;
    LPDRAWITEMSTRUCT lpd;
    HBITMAP hold;
    switch (umsg)
    {
    case WM_INITDIALOG:
        hbit=LoadBitmap(hlnst,MAKEINTRESOURCE(IDB_BIT));
        GetObject(hbit,sizeof(BITMAP),&bitinfo);
        break;
        
        
    case WM_DRAWITEM:
        lpd=(LPDRAWITEMSTRUCT)lparam;
        hdcbtn=lpd->hDC;
        recbtn=lpd->rcItem;
        hdcsue=CreateCompatibleDC(hdcbtn);
        hold = (HBITMAP)SelectObject(hdcsue, hbit);
        
        if (lpd->CtlID==IDB_DRAW)
        {
            StretchBlt(hdcbtn,0,0,(recbtn.right-recbtn.left),
                (recbtn.bottom-recbtn.top),hdcsue,0,0,
                bitinfo.bmWidth,bitinfo.bmHeight,SRCCOPY);
        }
        
        if (lpd->CtlID==IDB_BTN)
        {
            FillRect(hdcbtn,&recbtn,CreateSolidBrush(RGB(12,145,214)));        
        }
        SelectObject(hdcsue, hold);
        DeleteDC(hdcsue);

        break;

    case WM_CLOSE:
        DestroyWindow(hdlg);
        break;
        
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    
    
    return FALSE;
}