resource.h中
#define IDB_BITMAP1 101b.rs中
#include "resource.h"
IDB_BITMAP1 BITMAP DISCARDABLE "me.BMP"main.cpp中
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HDC hdc;
HDC hdcmem;
HBITMAP hbm;
BITMAP bm;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="bitmap";
char lpszTitle[]="bitmap test."; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)(BLACK_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =lpszClassName;
wndclass.lpszMenuName =0;
wndclass.style =0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return false;
} hwnd=CreateWindow(lpszClassName,lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);
hbm=LoadBitmap(hInstance,"IDB_BITMAP1");
GetObject(hbm,sizeof(BITMAP),&bm);
ShowWindow(hwnd,nCmdShow);
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)
{
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
hdc=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,hbm);
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
DeleteObject(hbm);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
//高手指教!
#define IDB_BITMAP1 101b.rs中
#include "resource.h"
IDB_BITMAP1 BITMAP DISCARDABLE "me.BMP"main.cpp中
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HDC hdc;
HDC hdcmem;
HBITMAP hbm;
BITMAP bm;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="bitmap";
char lpszTitle[]="bitmap test."; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)(BLACK_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =lpszClassName;
wndclass.lpszMenuName =0;
wndclass.style =0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return false;
} hwnd=CreateWindow(lpszClassName,lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);
hbm=LoadBitmap(hInstance,"IDB_BITMAP1");
GetObject(hbm,sizeof(BITMAP),&bm);
ShowWindow(hwnd,nCmdShow);
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)
{
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
hdc=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,hbm);
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
DeleteObject(hbm);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
//高手指教!
hdc=BeginPaint(hwnd,&ps);
HBITMAP holdbm = (HBITMAP)SelectObject(hdcmem,hbm);//位图句柄要选入内存设备环境
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmdm, holdbmp);//用过的位图句柄要选出设备环境
EndPaint(hwnd,&ps);
break;
2)
WinMain函数中我有
hbm=LoadBitmap(hInstance,"IDB_BITMAP1");
而且
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,hbm);
请问这个算不算是位图句柄要选入内存设备环境?
bm,hbm,hdcmem我都用的是全局变量.
SelectObject(hdc,hbm);错误,位图句柄要选入内存DC。请照我的代码改改看。
#include <windows.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);HDC hdc;
HDC hdcmem;
HBITMAP hbm;
BITMAP bm;
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd;
MSG Msg;
WNDCLASS wndclass;
char lpszClassName[]="bitmap";
char lpszTitle[]="bitmap test."; wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hbrBackground =(HBRUSH)(BLACK_BRUSH);
wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
wndclass.hInstance =hInstance;
wndclass.lpfnWndProc =WndProc;
wndclass.lpszClassName =lpszClassName;
wndclass.lpszMenuName =0;
wndclass.style =0;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return false;
} hwnd=CreateWindow(lpszClassName,lpszTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,NULL,
hInstance,
NULL);
hbm=LoadBitmap(hInstance,"IDB_BITMAP1");
GetObject(hbm,sizeof(BITMAP),&bm);
ShowWindow(hwnd,nCmdShow);
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)
{
PAINTSTRUCT ps;
switch(message)
{
case WM_CREATE:
hdc=GetDC(hwnd);
hdcmem=CreateCompatibleDC(hdc);
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
/*
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdc,hbm);
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
EndPaint(hwnd,&ps);
break;
*/
{
hdc=BeginPaint(hwnd,&ps);
HBITMAP holdbm = (HBITMAP)SelectObject(hdcmem,hbm);//位图句柄要选入内存设备环境
BitBlt(hdc,100,100,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem, holdbm);//用过的位图句柄要选出设备环境
EndPaint(hwnd,&ps);
}
break; case WM_DESTROY:
DeleteObject(hbm);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}