关于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属性
为什么用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; }