标题:windows编程 奇怪的图片显示问题
只看楼主
死亡军团
Rank: 2
等 级:论坛游民
威 望:2
帖 子:166
专家分:20
注 册:2008-11-4
结帖率:100%
已结贴  问题点数:20 回复次数:12 
windows编程 奇怪的图片显示问题
我想显示一张图片,以下代码编译没错,在vc下生成的程序也没问题,可以达到显示图片的功能,但是就是在Debug文件夹的exe软件不能显示那张图片,为什么会出现这个问题呢?               如果可以的话,请附上一个最简单的以图片作为背景的代码```````````````先谢谢各位了~~~~~


#include "windows.h"
#include "resource.h"
#include <string.h>
//窗口函数的函数原形

LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);
HWND hwnd;



int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

{  MSG msg;
   char szClassName[]="MainWClass";
   WNDCLASSEX wndclass;
   
   //用描述主窗口的参数填充WNDCLASSEX结构

   wndclass.cbSize       =sizeof(wndclass);                    //  结构体大小
   wndclass.style        =CS_HREDRAW|CS_VREDRAW;               //  指定如果大小改变就重画
   wndclass.lpfnWndProc  =MainWndProc;                         //  窗口函数指针
   wndclass.cbClsExtra   =0;                                   //  没有额外的类内存
   wndclass.cbWndExtra   =0;                                   //  没有额外的窗口内存
   wndclass.hInstance    =hInstance;                           //  实例句柄
   wndclass.hIcon        =NULL;//LoadIcon(hInstance,(LPSTR)IDI_ICON1);      //  使用预定义图标
   wndclass.hCursor      =LoadCursor(NULL,IDC_ARROW);          //  使用预定义光标
   wndclass.hbrBackground=(HBRUSH)GetStockObject(16); //  使用白色背景画刷
   wndclass.lpszMenuName =NULL;//(LPSTR)IDR_TYPER;                                //  不指定菜单
   wndclass.lpszClassName=szClassName;                         //  窗口类的名称
   wndclass.hIconSm      =NULL;                                //  没有类的小图标

   //注册窗口类

   RegisterClassEx(&wndclass);

   //创建主窗口
   
  hwnd=CreateWindow(
                             szClassName,
                  "香薰恋人",
             WS_OVERLAPPEDWINDOW,//WS_DISABLED,
              600,//CW_USEDEFAULT,
              400,//CW_USEDEFAULT,
              300,//CW_USEDEFAULT,
              300,//CW_USEDEFAULT,
              NULL,
              NULL,
              hInstance,
              NULL,
            );


   if(hwnd==NULL)
   {
       MessageBox(NULL,"创建窗口出错!","error",MB_OK);
       return -1;
   }
   
   //显示窗口,刷新窗口客户区


   ShowWindow (hwnd,nCmdShow);
   UpdateWindow(hwnd);

   //从消息队列中取得消息,交给窗口函数处理,直到GetMessage 返回FALSE ,结束消息循环

   SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOREDRAW|SWP_NOSIZE);

   while(GetMessage(&msg,NULL,0,0))
   {
      //转化键盘消息
       TranslateMessage(&msg);
      //将消息发送到相应的窗口函数
       DispatchMessage(&msg);
   }
   
   //当GetMessage返回FALSE 时结束函数

   return msg.wParam;

}

LRESULT CALLBACK MainWndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    switch (message)
  {
  case WM_PAINT:
      {
    PAINTSTRUCT ps;
    HDC hdc;
    HBITMAP hbmp;
    BITMAP bmp;
    HDC hdcMem;  

    hdc = BeginPaint(hwnd, &ps);
  
    hdcMem  = CreateCompatibleDC(hdc);
    hbmp = (HBITMAP)LoadImage(NULL, ("11.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
    GetObject(hbmp, sizeof(BITMAP), &bmp);

    SelectObject(hdcMem, hbmp);
    BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem, 0, 0, SRCCOPY);

    DeleteDC(hdcMem);
    //DeleteObject(hbmp);
    EndPaint(hwnd, &ps);

        
        break;
          

      }
    
  case WM_DESTROY:  //正在销毁窗口
                    //向消息队列投递一个WM_OUIT 消息,促使GetMessage 函数返回0,结束消息循环
      PostQuitMessage(0);
      return 0;
      break;
  
}
   //将我们不处理的消息交给系统做默认处理

  return DefWindowProc(hwnd,message,wParam,lParam);


}
搜索更多相关主题的帖子: windows编程 显示图片 代码 背景 
2009-08-25 11:13
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:5 
hbmp = (HBITMAP)LoadImage(NULL, ("11.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION)
加载文件路径是相对路径,跟debug文件夹没有关系。只要exe文件跟11.bmp不在同一目录都不行。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-08-25 18:30
死亡军团
Rank: 2
等 级:论坛游民
威 望:2
帖 子:166
专家分:20
注 册:2008-11-4
得分:0 
但我已经导入了那张图片了,也不行的吗??那要怎么样才可以使exe跟11.bmp就算不在同一个目录也可以显示呢??
2009-08-25 20:07
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
得分:5 
LoadImage是一个多功能包装函数,它根据传入参数的不同可以加载图片、光标、图标资源。如果要做到图片路径无关性,最好的办法就是把图片编译到资源文件中。
HANDLE LoadImage(
HINSTANCE hinst,
| LPCTSTR lpszName,
UINT uType,
int cxDesired,
int cyDesired,
UINT fuLoad );
If the hinst parameter is non-NULL and the fuLoad parameter does not include LR_LOADFROMFILE, lpszName is a pointer to a null-terminated string that contains the name of the image resource in the hinst module.

如果hinst非空,并且fuLoad不包含LR_LOADFROMFILE标志,lpszName是一个指向hinst中的资源名称。OK。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2009-08-25 22:07
死亡军团
Rank: 2
等 级:论坛游民
威 望:2
帖 子:166
专家分:20
注 册:2008-11-4
得分:0 
回复 4楼 东海一鱼
我上网查过了,也试过了,还是不会修改,,如果hinst为非空的话,那应该填什么呢? 那个lpszName 是不是ID号呢??麻烦你帮我修改一下,最好的话就带点必要的解析,方便我们初学者学学嘛~~~~先谢谢您了~~~
2009-08-25 23:18
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:5 
其实很简单:你只要将你源代码文件夹里面的那张图片复制到Debug文件夹去就OK。VC执行程序时的默认文件夹是你的源代码文件夹。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-26 01:28
hnyanyafei
Rank: 1
来 自:洛阳
等 级:新手上路
帖 子:10
专家分:0
注 册:2008-6-21
得分:0 
同意上边的,只要你把exe文件和位图资源放在一个文件夹下就没事了!
2009-08-26 10:02
死亡军团
Rank: 2
等 级:论坛游民
威 望:2
帖 子:166
专家分:20
注 册:2008-11-4
得分:0 
但是我要的是把exe发到别人的机子里那是也可以显示的,,所以六楼的方法应该不行的吧~~~
2009-08-26 10:29
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
得分:0 
死亡军团用的头像是不是 痕迹画廊 画的?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2009-08-26 11:01
死亡军团
Rank: 2
等 级:论坛游民
威 望:2
帖 子:166
专家分:20
注 册:2008-11-4
得分:0 
回复 9楼 flyue
这个我就不知道了,我是在网上找古典美女那时看到的,觉得挺漂亮的~~~
2009-08-26 11:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-283644-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.598306 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved