请问如何加载位图资源 hBm=LoadBitmap(hInstance,ID_PIC);不成功啊 我插了一个位图资源,ID为ID_PICthx 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有,菜单的ID和菜单名(Menuname)分别是哪里设定的 hBm=LoadBitmap(hInstance,"picname");后面应该是文件名,不是ID. hBm=LoadBitmap(hInstance,"picname");不行啊picname是不是ID_PIC的properties的file name 须先将BMP读入内存设备描述表,再拷至屏幕窗口。以下代码直接调用API,在VC++中句柄是隐含的,下列代码改写后才能用于VC++。 HDC hMemDC; //内存的DC BITMAP bm; HBITMAP hBitmap, hOldBmp; hBitmap=LoadBitmap(hInstance,ID_Bitmap); hMemDC=CreateCompatibleDC(hDC); //窗口的DC hOldBmp=(HBITMAP)SelectObject(hDCMem,hBitmap); GetObject(hBitmap,sizeof(BITMAP),&bm); Bitblt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); ...... ...... ...... 如果用MFC编程,则BMP的ID应在VC的Microsoft Developer Studio中定义,否则在自创的RC文件中定义, 如:MyBmp BITMAP "xxxx.bmp"其中MyBmp即为xxxx.bmp 的ID, 则有 LoadBitmap(hInstance,MyBmp); #include<windows.h>#include<string.h>#include<stdlib.h>#include<stdio.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[]="Example_For_bitmap"; wndclass.style=0; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; wndclass.lpszClassName=lpszClassName; 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_BITMAP"); GetObject(hBm,sizeof(BITMAP),(LPVOID)&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); case WM_PAINT: hdc=BeginPaint(hwnd,&ps); SelectObject(hdcmem,hBm); BitBlt(hdc,180,50,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;} //{{NO_DEPENDENCIES}}// Microsoft Developer Studio generated include file.// Used by bitmap.rc//#define IDB_BITMAP 101// Next default values for new objects// #ifdef APSTUDIO_INVOKED#ifndef APSTUDIO_READONLY_SYMBOLS#define _APS_NEXT_RESOURCE_VALUE 102#define _APS_NEXT_COMMAND_VALUE 40001#define _APS_NEXT_CONTROL_VALUE 1000#define _APS_NEXT_SYMED_VALUE 101#endif#endif //Microsoft Developer Studio generated resource script.//#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 2 resource.//#include "afxres.h"/////////////////////////////////////////////////////////////////////////////#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////// Chinese (P.R.C.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)#ifdef _WIN32LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED#pragma code_page(936)#endif //_WIN32#ifdef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// TEXTINCLUDE//1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0"END2 TEXTINCLUDE DISCARDABLE BEGIN "#include ""afxres.h""\r\n" "\0"END3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0"END#endif // APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Bitmap//IDB_BITMAP BITMAP DISCARDABLE "pic7_2.bmp"#endif // Chinese (P.R.C.) resources/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED///////////////////////////////////////////////////////////////////////////////// Generated from the TEXTINCLUDE 3 resource.///////////////////////////////////////////////////////////////////////////////#endif // not APSTUDIO_INVOKED HBITMAP hBit = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BUTTON1)); *************修正我在上面的两次回复****************须先将BMP读入内存设备描述表,再拷至屏幕窗口。以下代码直接用API写出,改写后才能用于VC++。 HDC hMemDC; //内存的DC BITMAP bm; HBITMAP hBitmap, hOldBmp; hBitmap=LoadBitmap(hInstance,BmpName); 或用 hBitmap=LoadBitmap(hInstance,MAKEINTRESOURCE(BmpID));//BmpName 是BMP在RC文件中定义的名称(字符串),可与盘上的BMP文件名不同//BmpID 是BMP在RC文件中定义的标识符(WORD 型) hMemDC=CreateCompatibleDC(hDC); //hDC 为屏幕窗口的DC hOldBmp=(HBITMAP)SelectObject(hDCMem, hBitmap); GetObject(hBitmap,sizeof(BITMAP), &bm); Bitblt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY); ...... ...... ......//////////注意//////////////////////如果用MFC编程,在VC的Microsoft Developer Studio中似乎只能定义BmpID,且自动形成RC文件。则应采用 LoadBitmap(hInstance, MAKEINTRESOURCE(BmpID)); 若能自创RC文件中,则可在RC中定义BmpName, 如以下语句: MyBmp BITMAP "xxxx.bmp" 其中MyBmp 即为xxxx.bmp在RC中的名称,这时应采用 LoadBitmap(hInstance, "MyBmp"); 若在自创的RC文件中,如下定义: #define MyBmp 10001 MyBmp BITMAP "xxxx.bmp"这时,MyBmp 成为xxxx.bmp在RC中的标识符,故应采用 LoadBitmap(hInstance, MAKEINTRESOURCE(MyBmp)); SO夸张, 早按照laserman(我爱C++) 说的做不久结了.要费那么大的劲!HBITMAP hBit = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BUTTON1)); 这个叫什么图? 在线等字符串转16进制 求龚建伟串口实例scporttest.zip 请VC++有经验的朋友看一下 RichEdit用在ATL中报错 GetPrivateProfileString()函数使用疑问 请问怎样在DLL中做个卸载程序? 请解释几句代码的意思??? 请问怎么实现经过特定时间,软件自动锁定功能 怎样增加一个输入编辑框的记录值???请各位高手指点迷津呀..谢谢了 MFC库与标准C++库的冲突 内存遗漏问题
后面应该是文件名,不是ID.
以下代码直接调用API,在VC++中句柄是隐含的,下列代码改写后才能用于VC++。 HDC hMemDC; //内存的DC
BITMAP bm;
HBITMAP hBitmap, hOldBmp; hBitmap=LoadBitmap(hInstance,ID_Bitmap);
hMemDC=CreateCompatibleDC(hDC); //窗口的DC
hOldBmp=(HBITMAP)SelectObject(hDCMem,hBitmap);
GetObject(hBitmap,sizeof(BITMAP),&bm);
Bitblt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
......
......
......
其中MyBmp即为xxxx.bmp 的ID, 则有 LoadBitmap(hInstance,MyBmp);
#include<string.h>
#include<stdlib.h>
#include<stdio.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[]="Example_For_bitmap"; wndclass.style=0;
wndclass.lpfnWndProc=WndProc;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName=NULL;
wndclass.lpszClassName=lpszClassName; 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_BITMAP");
GetObject(hBm,sizeof(BITMAP),(LPVOID)&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); case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
SelectObject(hdcmem,hBm); BitBlt(hdc,180,50,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;
}
// Microsoft Developer Studio generated include file.
// Used by bitmap.rc
//
#define IDB_BITMAP 101// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 102
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
//
#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////
// Chinese (P.R.C.) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//IDB_BITMAP BITMAP DISCARDABLE "pic7_2.bmp"
#endif // Chinese (P.R.C.) resources
/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
MAKEINTRESOURCE(IDB_BUTTON1));
以下代码直接用API写出,改写后才能用于VC++。 HDC hMemDC; //内存的DC
BITMAP bm;
HBITMAP hBitmap, hOldBmp; hBitmap=LoadBitmap(hInstance,BmpName); 或用 hBitmap=LoadBitmap(hInstance,MAKEINTRESOURCE(BmpID));
//BmpName 是BMP在RC文件中定义的名称(字符串),可与盘上的BMP文件名不同
//BmpID 是BMP在RC文件中定义的标识符(WORD 型)
hMemDC=CreateCompatibleDC(hDC); //hDC 为屏幕窗口的DC
hOldBmp=(HBITMAP)SelectObject(hDCMem, hBitmap);
GetObject(hBitmap,sizeof(BITMAP), &bm);
Bitblt(hDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
......
......
......//////////注意//////////////////////
如果用MFC编程,在VC的Microsoft Developer Studio中似乎只能定义BmpID,且自动形成RC文件。则应采用
LoadBitmap(hInstance, MAKEINTRESOURCE(BmpID));
若能自创RC文件中,则可在RC中定义BmpName, 如以下语句:
MyBmp BITMAP "xxxx.bmp"
其中MyBmp 即为xxxx.bmp在RC中的名称,这时应采用
LoadBitmap(hInstance, "MyBmp"); 若在自创的RC文件中,如下定义:
#define MyBmp 10001
MyBmp BITMAP "xxxx.bmp"
这时,MyBmp 成为xxxx.bmp在RC中的标识符,故应采用
LoadBitmap(hInstance, MAKEINTRESOURCE(MyBmp));
要费那么大的劲!
HBITMAP hBit = ::LoadBitmap(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BUTTON1));