鱼C论坛

 找回密码
 立即注册
查看: 2627|回复: 2

一个程序·

[复制链接]
发表于 2017-10-30 19:12:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求一个出现图片的C++程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-30 21:23:53 | 显示全部楼层
如果想要界面显示的话请看MFC或这Windows SDK 编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-31 10:02:03 | 显示全部楼层
楼主是要显示图片的意思吗?这里有一个Windows加载BMP文件的Demo,供参考。

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

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

  5. //重新设定windows窗口客户区域大小
  6. void ResetClientSize(HWND hWnd,int width, int height)
  7. {
  8.         RECT rectProgram,rectClient;
  9.         GetWindowRect(hWnd,&rectProgram);
  10.         GetClientRect(hWnd,&rectClient);
  11.         int nWidth = rectProgram.right -rectProgram.left - (rectClient.right -rectClient.left);
  12.         int nHeiht = rectProgram.bottom -rectProgram.top - (rectClient.bottom -rectClient.top);
  13.         nWidth += width;
  14.         nHeiht += height;
  15.         rectProgram.right = nWidth;
  16.         rectProgram.bottom=  nHeiht;
  17.         int showToScreenx =GetSystemMetrics(SM_CXSCREEN)/2-nWidth/2;
  18.         int showToScreeny =GetSystemMetrics(SM_CYSCREEN)/2-nHeiht/2;
  19.         MoveWindow(hWnd, showToScreenx,showToScreeny, rectProgram.right, rectProgram.bottom, false);
  20.         InvalidateRect(hWnd,NULL,TRUE);
  21. }

  22. // 入口点
  23. int CALLBACK WinMain(
  24.                                          HINSTANCE hInstance,
  25.                                          HINSTANCE hPrvInstance,
  26.                                          LPSTR lpCommandLine,
  27.                                          int cmdShow)
  28. {
  29.         char* clsName = "MyApp";
  30.         WNDCLASS wc;
  31.         ZeroMemory(&wc,sizeof(WNDCLASS));
  32.         wc.hInstance = hInstance;
  33.         wc.lpszClassName = clsName;
  34.         wc.lpfnWndProc = MyWindowProc;
  35.         wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
  36.         wc.style = CS_HREDRAW | CS_VREDRAW;
  37.         RegisterClass(&wc);
  38.         HWND hMainwind = CreateWindow(clsName,"显示BMP图片",WS_OVERLAPPEDWINDOW,
  39.                 300,200,100,100,NULL,NULL,hInstance,NULL);
  40.         if(hMainwind == NULL)
  41.                 return 0;

  42.         OPENFILENAME ofn;
  43.         char szFile[MAX_PATH];
  44.         ZeroMemory(&ofn,sizeof(ofn));
  45.         ofn.lStructSize = sizeof(ofn);
  46.         ofn.lpstrFile = szFile;
  47.         ofn.lpstrFile[0] = TEXT('\0');
  48.         ofn.nMaxFile = sizeof(szFile);
  49.         ofn.lpstrFilter= TEXT("bmp\0*.bmp\0");
  50.         ofn.nFilterIndex = 0;
  51.         ofn.lpstrFileTitle = NULL;
  52.         ofn.nMaxFileTitle = 0;
  53.         ofn.lpstrInitialDir = NULL;
  54.         ofn.lpstrTitle=TEXT("请选择一个BMP文件");
  55.         ofn.hwndOwner = hMainwind;
  56.         ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  57.         if (GetOpenFileName(&ofn))
  58.         {
  59.                 HBITMAP hBitmap = (HBITMAP)LoadImage(NULL, szFile, IMAGE_BITMAP,
  60.                         0, 0, LR_LOADFROMFILE);
  61.                 BITMAP bmp;
  62.                 ZeroMemory(&bmp,sizeof(bmp));
  63.                 GetObject(hBitmap, sizeof(BITMAP), &bmp);
  64.                 ResetClientSize(hMainwind,bmp.bmWidth,bmp.bmHeight);

  65.                 ShowWindow(hMainwind,SW_NORMAL);
  66.                 UpdateWindow(hMainwind);
  67.                
  68.                 MSG msg;
  69.                 GetMessage(&msg,NULL,0,0);
  70.                 while(msg.message != WM_QUIT)
  71.                 {
  72.                         if(PeekMessage( &msg,NULL,0,0,PM_REMOVE))
  73.                         {
  74.                                 TranslateMessage(&msg);
  75.                                 DispatchMessage(&msg);
  76.                         }
  77.                         else
  78.                         {
  79.                                 HDC hDC = GetDC(hMainwind);
  80.                                 HBRUSH hBrush = CreatePatternBrush(hBitmap);
  81.                                 HBRUSH hOldBrush = (HBRUSH)SelectObject(hDC, hBrush);
  82.                                 Rectangle(hDC, 0, 0, bmp.bmWidth,bmp.bmHeight);
  83.                                 SelectObject(hDC, hOldBrush);
  84.                                 DeleteObject(hOldBrush);
  85.                                 ReleaseDC(hMainwind,hDC);
  86.                         }
  87.                 }
  88.                 DeleteObject(hBitmap);
  89.         }

  90.         return 0;
  91. }

  92. LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  93. {
  94.         switch(msg)
  95.         {
  96.         case WM_DESTROY:
  97.                 PostQuitMessage(0);//退出程序
  98.                 return 0;
  99.         default:
  100.                 break;
  101.         }
  102.         return DefWindowProc(hwnd,msg,wParam,lParam);
  103. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 21:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表