六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

VC中如何在對話框上顯示位圖

[摘要]在用VC開發應用程序的時候,經常要在對話框上顯示位圖。如果把位圖加入資源中,當然是省時省力,但程序卻也增肥不少,并且失去了靈活性。而如果你要動態地顯示一大堆圖片,各個圖片大小不一,這豈不…本文就是介紹如何在對話框上顯示位圖,并且如何讓對話框自動適應位圖的大小的。 ---- VC對位圖的操作比較煩瑣...
  在用VC開發應用程序的時候,經常要在對話框上顯示位圖。如果把位圖加入資源中,當然是省時省力,但程序卻也增肥不少,并且失去了靈活性。而如果你要動態地顯示一大堆圖片,各個圖片大小不一,這豈不…本文就是介紹如何在對話框上顯示位圖,并且如何讓對話框自動適應位圖的大小的。

---- VC對位圖的操作比較煩瑣,要顯示一個位圖到對話框上去,很麻煩。我在開發的過程中走通了兩條路:一是使用Kodak圖象編輯控件;二是利用Microsoft提供的例子中的一個類,并稍加改造。兩種方法各有優缺點。我把它寫下來,以避免其他人多走彎路。

    一、利用控件

   利用WINDOWS98中帶的Kodak圖象編輯控件來在對話框上顯示一個位圖,雖然有點兒殺雞用牛刀的感覺,但卻不失為一個極方便快捷的方法。顧名思義,這個控件不但可以顯示,它更強大的功能還是在編輯圖象,它可以對圖象進行放大、縮小、標注等操作。而且,使用起來很方便。但它畢竟是別人的東東,不太清楚它的底細,用起來就不免…我就吃了它的苦頭。在本機上調試通過,安裝了其他幾臺機器也很正常,但是有一臺卻顏色失真了,變成了水粉畫。不知是不是那臺機器的顯卡有問題。還有就是據我初步實驗,在95下好象行不通。不過現在大家都是WIN98,這似乎已經不算一個問題了。下面就把我的過程寫下來:

  首先應該保證系統中有這個控件。注意,它不能單獨使用,必須和其他幾個控件(特別是Imgcmn.dll)一同使用。如果沒有,從別的機器上copy過來即可。這幾個文件是Imgadmin.ocx,Imgcmn.dll,Imgedit.ocx,Imgscan.ocx,Imgshl.dll,Imgthumb.ocx,Imgutil.dll,把它們copy到windows\system目錄下,然后用regsvr32.exe將它們分別注冊。

  打開VC,新建一個基于對話框的工程(主要是為了說明方便),刪除掉對話框上其他的東西(按鈕和LABEL),在對話框上單擊右鍵,單擊Insert Activex control… 選擇Kodak圖象編輯控件,大小任意。

  在對話框上選中該控件,打開view classwizard,單擊Member Variables,點擊Add Variable…按鈕,系統會彈出一個對話框,大體上是提示你它要把控件加入工程中了,確定即可。在接下來的對話框上繼續點擊OK,此時,會出現一個對話框,提示你輸入變量名,輸入你想要的名字即可。我們輸入m_ctrlPicture。單擊確定。

  此時你的工程中已經有了一個名字為m_ctrlPicture的控件,接下來就可以利用它來顯示圖片了,我們把它加到對話框的初始化中。單擊ClassWizard,選擇OnInitDialog,單擊Edit Code按鈕。

  在OnInitDialog中,找到// TODO: Add extra initialization here,在下面加入如下代碼:
m_ctrlPicture.SetImage("c:\\windows\Clouds.bmp");
m_ctrlPicture.Display();


  編譯運行,看到了嗎?就這么簡單。

  但是它的大小卻是固定的,要看全圖只能利用滾動條。下面我們再來得到圖象的尺寸,然后使對話框自動適應圖象的大小。還是在初始化中,代碼如下:
m_ctrlPicture.SetImage("c:\\windows\\Clouds.bmp");
const int nAddConst=40;
//圖象尺寸不會正合適,需要加點增量。
long lPictureWidth=m_ctrlPicture.GetImageWidth();
long lPictureHeight=m_ctrlPicture.GetImageHeight();
MoveWindow(0,0,lPictureWidth,lPictureHeight,true);
    //改變對話框大小

    //改變控件的大小
m_ctrlPicture.MoveWindow(0,0,lPictureWidth,
lPictureHeight+nAddConst,true);
m_ctrlPicture.Display();

成功了。
注意,這個控件不但只能顯示bmp,還可顯示許多其他的格式,你可以自己試一下。
 

   二、利用Cdib類

  這個方法比較煩瑣,并且只能顯示bmp,但它不依賴特定的系統,也比較實用。這個類在MSDN提供的例子中有,名字為ex10c.dsw,找到cdib.cpp和cdib.h,加入你的工程即可。如果你找不到,也可以到我的網頁去看看http://dlgis.topcool.net或者給我寫信[email protected]

---- 下面是過程:

新建一個基于對話框的工程,單擊Add Files to Project,加入上面所說的兩個文件。

在對話框的頭文件中加入#include "cdib.h",然后給對話框類加入一個成員變量,代碼如下: Cdib m_dibFile;

在對話框的初始化函數中,加入如下代碼:
#ifdef MEMORY_MAPPED_FILES
if (m_dibFile.AttachMapFile
("c:\\windows\\clouds.bmp",TRUE)==TRUE)
{ // share
Invalidate();
}
#else
CFile file;
file.Open("c:\\windows\\clouds.bmp",
Cfile::modeRead);
if (m_dibFile.Read(&file) == TRUE)
{
Invalidate();
}
#endif // MEMORY_MAPPED_FILES
CClientDC dc(this);
m_dibFile.SetSystemPalette(&dc);


在OnPaint函數中,找到else,然后在里面加入如下代碼:
BeginWaitCursor();
m_dibFile.UsePalette(GetDC());
CSize sizeFileDib = m_dibFile.GetDimensions();
m_dibFile.Draw(GetDC() ,CPoint(0,0), sizeFileDib);
EndWaitCursor();

  運行程序,是不是看到藍天白云了?!下面繼續加入讓對話框自動適應圖片大小的代碼,還是在初始化中,緊接這上一次的代碼,加入如下兩行:
CSize sizeFileDib = m_dibFile.GetDimensions();
MoveWindow(0,0,sizeFileDib.cx,sizeFileDib.cy,true);

  完全顯示了嗎?也許不完全合適,你可以細微地調整cx,cy兩個參數,使之適應。


主站蜘蛛池模板: 做a视频大全 | 自拍三区 | 日韩中文字幕在线看 | 三级理论手机在线观看视频 | 四虎成人免费网址在线 | 天天爱天天做天天干 | 一级做a爰片久久毛片毛片 一级做a爰片久久毛片看看 | 日本一区二区三区视频在线 | 亚洲欧美日韩在线观看二区 | 同房视频在线观看 | 一二三中文乱码亚洲乱码 | 亚洲黄视频在线观看 | 视频国产在线 | 色涩在线观看 | 午夜影视在线免费观看 | 日韩一级片播放 | 亚洲国产日韩欧美在线 | 亚洲最新在线 | 天堂bt资源在线官网 | 亚洲视频免费播放 | 青青青久草 | 伊人影院综合 | 在线看日韩 | 日韩久草视频 | 欧美视频黄色 | 欧美视频第二页 | 青青在线免费观看 | 日韩福利网 | 青草久草| 做a小视频 | 天天射综合网站 | 日本 欧美 在线 | 亚洲第一综合网站 | 欧美一级视频在线观看欧美 | 亚洲香蕉综合在人在线视看 | 日本美女久久 | 天天色啪 | 青青青青青国产免费手机看视频 | 天天色天天摸 | 四虎在线观看 | 青草悠悠视频在线观看 |