主题:如何在程序里面填加图片(注意是调入)
chengyu
[专家分:0] 发布于 2005-04-22 19:55:00
具体是--我想将JPG或BMP图读到我开辟的窗口里面
不用Timage,
非常感谢
回复列表 (共6个回复)
沙发
KnowBetter [专家分:150] 发布于 2005-04-23 12:26:00
TPicture * pic;
pic=new (TPicture);
pic->LoadFromFile("图片路径");
想加图片的窗体名->Canvas->Draw(0,0,pic->Graphic);
板凳
chengyu [专家分:0] 发布于 2005-04-23 14:46:00
我的程序是这样的:
试问能不能加,在那里加,谢谢。
// Mouse.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
LRESULT APIENTRY MainWndProc(HWND, UINT, WPARAM, LPARAM); //´°¿Úº¯Êý
BOOL InitApplication(HINSTANCE); //×¢²á´°¿ÚÀຯÊý
BOOL InitInstance(HINSTANCE, int); //´´½¨´°¿Úº¯Êý
HINSTANCE hInst; //µ±Ç°¾ä±ú
HWND hWndMain; //´°¿Ú¾ä±ú
HBITMAP hSun, hMoon; //λͼ¾ä±ú
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if(!InitApplication(hInstance)) //×¢²á´°¿ÚÀà
return (FALSE);
if(!InitInstance(hInstance,nCmdShow)) //´´½¨´°¿Ú
return (FALSE);
hSun = LoadBitmap(hInstance, "SUN"); //»ñÈ¡SUNλͼ¾ä±ú
hMoon = LoadBitmap(hInstance, "MOON"); //»ñÈ¡MOONλͼ¾ä±ú
InvalidateRect(hWndMain, NULL, TRUE); //°´Ö¸¶¨ÇøÓò¸üÐÂÇøÓò
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcexMouse;
wcexMouse.cbSize = sizeof(WNDCLASSEX);
wcexMouse.style = CS_DBLCLKS; //Ö§³ÖÊó±êË«»÷
wcexMouse.lpfnWndProc = (WNDPROC)MainWndProc;
wcexMouse.cbClsExtra = 0;
wcexMouse.cbWndExtra = 0;
wcexMouse.hInstance = hInstance;
wcexMouse.hIcon = LoadIcon(NULL,IDI_WINLOGO);
wcexMouse.hCursor = LoadCursor(NULL,IDC_ARROW);
wcexMouse.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wcexMouse.lpszMenuName = NULL;
wcexMouse.lpszClassName = "MouseWClass";
wcexMouse.hIconSm = LoadIcon(NULL,IDI_WINLOGO);
//ΪÁ˱£Ö¤³ÌÐòWIN98/NTµÄ¼æÈÝÐԺͿÉÒÆÖ²ÐÔ£¬ÓÃÒÔ϶Դ°¿Ú½øÐÐ×¢²á
if (!RegisterClassEx (&wcexMouse))
{
if (!RegisterClass((LPWNDCLASS)&wcexMouse.style))
MessageBox (NULL, TEXT ("×¢²á´°¿ÚÀàʧ°Ü!"), "wcexMouse", MB_ICONERROR);
return (FALSE);
}
return (TRUE);
}
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
hInst = hInstance;
hWndMain = CreateWindow("MouseWClass",
"ʹÓÃÊó±êʾ·¶³ÌÐò",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
if(!hWndMain)
return (FALSE);
ShowWindow(hWndMain,nCmdShow);
UpdateWindow(hWndMain);
return (TRUE);
}
LRESULT APIENTRY MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDc, hMemDc;
PAINTSTRUCT ps;
DWORD fwKeys;
POINT ptMouse;
char szTitle[100];
static RECT rect1, rect2;
static HCURSOR hCursorPen;
switch(message)
{
case WM_CREATE:
rect1.left = 90;
rect1.right = 170;
rect1.top = 8;
rect1.bottom = 68;
rect2.left = 90;
rect2.right = 170;
rect2.top = 78;
rect2.bottom = 138;
hCursorPen = LoadCursor(hInst, "RCCURSOR");
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MOUSEMOVE:
ptMouse.x = LOWORD(lParam); //È¡lParamµÍ×Ö½ÚΪºá×ø±êx
ptMouse.y = HIWORD(lParam); //È¡lParam¸ß×Ö½ÚΪºá×ø±êy
fwKeys = wParam; //½«Êó±ê°´Å¥ºÍ¼üÅÌ×éºÏ¸³¸ø32λÎÞ·ûºÅÕûÊýfwKeys
//ÏÂÃæ´úÂë¶ÔÊó±ê½øÐÐλÖ÷¶Î§²âÊÔ¡£Èç¹ûÊó±êÂäÔÚλͼÉÏ£¬ÄÇô°ÑÊó±êÖ¸ÕëÉèÖÃΪ×Ô¶¨ÒåµÄ
//·ñÔò£¬²ÉÓÃÆÕͨµÄ¼ýÍ·Êó±ê¡£
if (PtInRect(&rect1, ptMouse) || PtInRect(&rect2, ptMouse)) //ÅжÏÖ¸¶¨µãÊÇ·ñÔÚÖ¸¶¨¾ØÐÎÄÚ
SetCursor(hCursorPen);
//ÔÚ±êÌâÀ¸ÉÏÏÔʾÊó±êµÄµ±Ç°Î»ÖúͰ´¼üºÍ°´¼üÐÅÏ¢
//°ÑÊä³ö¸ñʽºÍÊä³ö±äÁ¿Ë͵½szTitleÊý×é
wsprintf(szTitle, "Êó±ê²âÊÔ³ÌÐò ---- Êó±êλÖãº[%d,%d,%d]", ptMouse.x, ptMouse.y,ptMouse.y);
if (fwKeys!=0)
{
//°ÑÖ¸¶¨µÄÄÚÈÝÊä³öµ½szTitleÊý×éÖÐ
lstrcat(szTitle, " ---- Äú°´ÏÂÁË");
if(fwKeys & MK_CONTROL)
lstrcat(szTitle, "Ctrl ");
if(fwKeys & MK_SHIFT)
lstrcat(szTitle, "Shift ");
if(fwKeys & MK_LBUTTON)
lstrcat(szTitle, "Êó±ê×ó°´Å¥");
if(fwKeys & MK_RBUTTON)
lstrcat(szTitle, "Êó±êÓÒ°´Å¥");
lstrcat(szTitle, "¼ü");
}
SetWindowText(hWnd, szTitle);
break;
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
//Èç¹ûÊó±êË«»÷ÁË´°¿Ú¿Í»§Çø£¬ÄÇô¾ÍÏÔʾ×ø±êÐÅÏ¢
hDc = GetDC(hWnd);
//ÉèÖÃÊä³ö×ÖÌåÑÕÉ«
SetTextColor(hDc, (message == WM_LBUTTONDBLCLK) ? RGB(255, 0, 0) : RGB(0, 0, 255));
wsprintf(szTitle, "(%d,%d)", LOWORD(lParam), HIWORD(lParam));
TextOut(hDc, LOWORD(lParam), HIWORD(lParam), szTitle, lstrlen(szTitle)); //ÔÚÖ¸¶¨Î»ÖÃÊä³öÎı¾
ReleaseDC(hWnd, hDc);
break;
case WM_PAINT:
hDc = BeginPaint(hWnd, &ps);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hSun);
BitBlt(hDc, 90, 8, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hMoon);
BitBlt(hDc, 90, 78, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteObject(hSun);
DeleteObject(hMoon);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0);
}
3 楼
chengyu [专家分:0] 发布于 2005-04-23 14:49:00
上面复制错误,下面为清晰程序
// Mouse.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
LRESULT APIENTRY MainWndProc(HWND, UINT, WPARAM, LPARAM); //窗口函数
BOOL InitApplication(HINSTANCE); //注册窗口类函数
BOOL InitInstance(HINSTANCE, int); //创建窗口函数
HINSTANCE hInst; //当前句柄
HWND hWndMain; //窗口句柄
HBITMAP hSun, hMoon; //位图句柄
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if(!InitApplication(hInstance)) //注册窗口类
return (FALSE);
if(!InitInstance(hInstance,nCmdShow)) //创建窗口
return (FALSE);
hSun = LoadBitmap(hInstance, "SUN"); //获取SUN位图句柄
hMoon = LoadBitmap(hInstance, "MOON"); //获取MOON位图句柄
InvalidateRect(hWndMain, NULL, TRUE); //按指定区域更新区域
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (msg.wParam);
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASSEX wcexMouse;
wcexMouse.cbSize = sizeof(WNDCLASSEX);
wcexMouse.style = CS_DBLCLKS; //支持鼠标双击
wcexMouse.lpfnWndProc = (WNDPROC)MainWndProc;
wcexMouse.cbClsExtra = 0;
wcexMouse.cbWndExtra = 0;
wcexMouse.hInstance = hInstance;
wcexMouse.hIcon = LoadIcon(NULL,IDI_WINLOGO);
wcexMouse.hCursor = LoadCursor(NULL,IDC_ARROW);
wcexMouse.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wcexMouse.lpszMenuName = NULL;
wcexMouse.lpszClassName = "MouseWClass";
wcexMouse.hIconSm = LoadIcon(NULL,IDI_WINLOGO);
//为了保证程序WIN98/NT的兼容性和可移植性,用以下对窗口进行注册
if (!RegisterClassEx (&wcexMouse))
{
if (!RegisterClass((LPWNDCLASS)&wcexMouse.style))
MessageBox (NULL, TEXT ("注册窗口类失败!"), "wcexMouse", MB_ICONERROR);
return (FALSE);
}
return (TRUE);
}
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
hInst = hInstance;
hWndMain = CreateWindow("MouseWClass",
"使用鼠标示范程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
if(!hWndMain)
return (FALSE);
ShowWindow(hWndMain,nCmdShow);
UpdateWindow(hWndMain);
return (TRUE);
}
LRESULT APIENTRY MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDc, hMemDc;
PAINTSTRUCT ps;
DWORD fwKeys;
POINT ptMouse;
char szTitle[100];
static RECT rect1, rect2;
static HCURSOR hCursorPen;
switch(message)
{
case WM_CREATE:
rect1.left = 90;
rect1.right = 170;
rect1.top = 8;
rect1.bottom = 68;
rect2.left = 90;
rect2.right = 170;
rect2.top = 78;
rect2.bottom = 138;
hCursorPen = LoadCursor(hInst, "RCCURSOR");
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MOUSEMOVE:
ptMouse.x = LOWORD(lParam); //取lParam低字节为横坐标x
ptMouse.y = HIWORD(lParam); //取lParam高字节为横坐标y
fwKeys = wParam; //将鼠标按钮和键盘组合赋给32位无符号整数fwKeys
//下面代码对鼠标进行位置范围测试。如果鼠标落在位图上,那么把鼠标指针设置为自定义的
//否则,采用普通的箭头鼠标。
if (PtInRect(&rect1, ptMouse) || PtInRect(&rect2, ptMouse)) //判断指定点是否在指定矩形内
SetCursor(hCursorPen);
//在标题栏上显示鼠标的当前位置和按键和按键信息
//把输出格式和输出变量送到szTitle数组
wsprintf(szTitle, "鼠标测试程序 ---- 鼠标位置:[%d,%d]", ptMouse.x, ptMouse.y);
if (fwKeys!=0)
{
//把指定的内容输出到szTitle数组中
lstrcat(szTitle, " ---- 您按下了");
if(fwKeys & MK_CONTROL)
lstrcat(szTitle, "Ctrl ");
if(fwKeys & MK_SHIFT)
lstrcat(szTitle, "Shift ");
if(fwKeys & MK_LBUTTON)
lstrcat(szTitle, "鼠标左按钮");
if(fwKeys & MK_RBUTTON)
lstrcat(szTitle, "鼠标右按钮");
lstrcat(szTitle, "键");
}
SetWindowText(hWnd, szTitle);
break;
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
//如果鼠标双击了窗口客户区,那么就显示坐标信息
hDc = GetDC(hWnd);
//设置输出字体颜色
SetTextColor(hDc, (message == WM_LBUTTONDBLCLK) ? RGB(255, 0, 0) : RGB(0, 0, 255));
wsprintf(szTitle, "(%d,%d)", LOWORD(lParam), HIWORD(lParam));
TextOut(hDc, LOWORD(lParam), HIWORD(lParam), szTitle, lstrlen(szTitle)); //在指定位置输出文本
ReleaseDC(hWnd, hDc);
break;
case WM_PAINT:
hDc = BeginPaint(hWnd, &ps);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hSun);
BitBlt(hDc, 90, 8, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hMoon);
BitBlt(hDc, 90, 78, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
DeleteObject(hSun);
DeleteObject(hMoon);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0);
}
4 楼
KnowBetter [专家分:150] 发布于 2005-04-25 18:52:00
小弟不才,
请问你以上是在C++Builder中做的吗?
5 楼
kanker [专家分:130] 发布于 2005-05-13 04:26:00
ft,怎么像是vc啊。
6 楼
风鼠 [专家分:380] 发布于 2005-05-25 17:10:00
#include "stdafx.h"
????
呵呵
好象不是bcb啊!
我来回复