ten$1 发表于 2017-10-30 19:12:39

一个程序·

求一个出现图片的C++程序

BngThea 发表于 2017-10-30 21:23:53

如果想要界面显示的话请看MFC或这Windows SDK 编程

sakana 发表于 2017-10-31 10:02:03

楼主是要显示图片的意思吗?这里有一个Windows加载BMP文件的Demo,供参考。

#include <Windows.h>
#include <Commdlg.h>

//先声明一下消息处理函数
LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

//重新设定windows窗口客户区域大小
void ResetClientSize(HWND hWnd,int width, int height)
{
        RECT rectProgram,rectClient;
        GetWindowRect(hWnd,&rectProgram);
        GetClientRect(hWnd,&rectClient);
        int nWidth = rectProgram.right -rectProgram.left - (rectClient.right -rectClient.left);
        int nHeiht = rectProgram.bottom -rectProgram.top - (rectClient.bottom -rectClient.top);
        nWidth += width;
        nHeiht += height;
        rectProgram.right = nWidth;
        rectProgram.bottom=nHeiht;
        int showToScreenx =GetSystemMetrics(SM_CXSCREEN)/2-nWidth/2;
        int showToScreeny =GetSystemMetrics(SM_CYSCREEN)/2-nHeiht/2;
        MoveWindow(hWnd, showToScreenx,showToScreeny, rectProgram.right, rectProgram.bottom, false);
        InvalidateRect(hWnd,NULL,TRUE);
}

// 入口点
int CALLBACK WinMain(
                                       HINSTANCE hInstance,
                                       HINSTANCE hPrvInstance,
                                       LPSTR lpCommandLine,
                                       int cmdShow)
{
        char* clsName = "MyApp";
        WNDCLASS wc;
        ZeroMemory(&wc,sizeof(WNDCLASS));
        wc.hInstance = hInstance;
        wc.lpszClassName = clsName;
        wc.lpfnWndProc = MyWindowProc;
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
        wc.style = CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&wc);
        HWND hMainwind = CreateWindow(clsName,"显示BMP图片",WS_OVERLAPPEDWINDOW,
                300,200,100,100,NULL,NULL,hInstance,NULL);
        if(hMainwind == NULL)
                return 0;

        OPENFILENAME ofn;
        char szFile;
        ZeroMemory(&ofn,sizeof(ofn));
        ofn.lStructSize = sizeof(ofn);
        ofn.lpstrFile = szFile;
        ofn.lpstrFile = TEXT('\0');
        ofn.nMaxFile = sizeof(szFile);
        ofn.lpstrFilter= TEXT("bmp\0*.bmp\0");
        ofn.nFilterIndex = 0;
        ofn.lpstrFileTitle = NULL;
        ofn.nMaxFileTitle = 0;
        ofn.lpstrInitialDir = NULL;
        ofn.lpstrTitle=TEXT("请选择一个BMP文件");
        ofn.hwndOwner = hMainwind;
        ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
        if (GetOpenFileName(&ofn))
        {
                HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szFile, IMAGE_BITMAP,
                        0, 0, LR_LOADFROMFILE);
                BITMAP bmp;
                ZeroMemory(&bmp,sizeof(bmp));
                GetObject(hBitmap, sizeof(BITMAP), &bmp);
                ResetClientSize(hMainwind,bmp.bmWidth,bmp.bmHeight);

                ShowWindow(hMainwind,SW_NORMAL);
                UpdateWindow(hMainwind);
               
                MSG msg;
                GetMessage(&msg,NULL,0,0);
                while(msg.message != WM_QUIT)
                {
                        if(PeekMessage( &msg,NULL,0,0,PM_REMOVE))
                        {
                                TranslateMessage(&msg);
                                DispatchMessage(&msg);
                        }
                        else
                        {
                                HDC hDC = GetDC(hMainwind);
                                HBRUSH hBrush = CreatePatternBrush(hBitmap);
                                HBRUSH hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
                                Rectangle(hDC, 0, 0, bmp.bmWidth,bmp.bmHeight);
                                SelectObject(hDC, hOldBrush);
                                DeleteObject(hOldBrush);
                                ReleaseDC(hMainwind,hDC);
                        }
                }
                DeleteObject(hBitmap);
        }

        return 0;
}

LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
        switch(msg)
        {
        case WM_DESTROY:
                PostQuitMessage(0);//退出程序
                return 0;
        default:
                break;
        }
        return DefWindowProc(hwnd,msg,wParam,lParam);
}
页: [1]
查看完整版本: 一个程序·