回 帖 发 新 帖 刷新版面

主题:如何在程序里面填加图片(注意是调入)

具体是--我想将JPG或BMP图读到我开辟的窗口里面
不用Timage,
非常感谢

回复列表 (共6个回复)

沙发

TPicture * pic;
pic=new (TPicture);
pic->LoadFromFile("图片路径");
想加图片的窗体名->Canvas->Draw(0,0,pic->Graphic);

板凳

我的程序是这样的:
试问能不能加,在那里加,谢谢。

// 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 楼

上面复制错误,下面为清晰程序

// 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 楼

小弟不才,
请问你以上是在C++Builder中做的吗?

5 楼

ft,怎么像是vc啊。

6 楼

#include "stdafx.h"
????
呵呵
好象不是bcb啊!

我来回复

您尚未登录,请登录后再回复。点此登录或注册