国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
在打開(kāi)文件對(duì)話框上實(shí)現(xiàn)圖象預(yù)覽

在打開(kāi)文件對(duì)話框上實(shí)現(xiàn)圖象預(yù)覽


作者:井中月_VC

單位:  西京大學(xué)

下載源代碼

前言:
本文主要是介紹在打開(kāi)文件對(duì)話框,實(shí)現(xiàn)對(duì)圖象,文本等預(yù)覽(在VC++6.0下實(shí)現(xiàn))。本人的水平有限,如有表達(dá)不清之處,請(qǐng)諒解,請(qǐng)各位提出意見(jiàn)與建議!

正文:
1、Win98下預(yù)覽對(duì)話框的實(shí)現(xiàn):
2、Win2000,XP下預(yù)覽對(duì)話框的實(shí)現(xiàn):
3、m_ofn成及OPENFILENAME的介紹:
4、定制個(gè)性的CFileDialog對(duì)話框:
5、怎么樣把預(yù)覽區(qū),放在對(duì)話框的右邊:
6、多選問(wèn)題的解決:
7、對(duì)預(yù)覽問(wèn)題的收集,如對(duì)文本,聲音等:


1、Win98下預(yù)覽對(duì)話框的實(shí)現(xiàn):對(duì)常用格式的圖片,在打開(kāi)文件對(duì)話框中實(shí)現(xiàn)預(yù)覽功能效果如下圖:

                                圖一
思路:
從CFileDialog派生CFileDialogEx類,為對(duì)話框安裝鉤子,利用HOOK攔截我們感興趣的CDN_SELCHANGE消息,在其中加入我們的預(yù)覽功能,原理就是這么簡(jiǎn)單!

使用方法:
1):在ResourView中,加一個(gè)對(duì)話框,其 ID為IDD_DIALOG_HOOK, 注意其屬性的設(shè)置:Dialog Properties->styles下=> style為Child、Border為None, 選中Clip siblings。 More Styles下 => 選中3D-look、 Contol。
2):在對(duì)話框上加一個(gè) Static Text控件,用來(lái)顯示圖片。ID為IDC_PIC,其屬性的設(shè)置為:Text Properties下 => 選中Notify、Sunken。
3):將Picture.h,Picture.cpp;CFileDialogEx.h,CFileDialogEx.cpp添加到工程中。其中類CFileProcess是文件處理類,用于文件進(jìn)行操作。類CPicture用于處理圖片。(詳見(jiàn)代碼)
4)在應(yīng)用處,只要包含頭文件 #include”FileDialogEx.h”。

For example:
CString strPathName;
CFileDialogEx dlg(TRUE);
if(dlg.DoModal() == IDOK)
{
POSITION Pos;
Pos = dlg.GetStartPosition();
while (Pos != NULL)
{
strPathName = dlg.GetNextPathName(Pos);
if(!strPathName.IsEmpty())
{
MessageBox(strPathName, _T("GetNextPathName"), MB_ICONINFORMATION);
}
}
}
注:由于時(shí)間緊,在Debug版本下,雙擊選中文件后,有暴停的現(xiàn)象(內(nèi)存泄漏),而且顯示效果也沒(méi)有進(jìn)行處理!

 

2、Win2000,XP下預(yù)覽對(duì)話框的實(shí)現(xiàn):比圖一多了左面的快捷欄(方便用戶查找)。其實(shí)這個(gè)實(shí)現(xiàn)很簡(jiǎn)單,只要判斷一下系統(tǒng)的版本就可以了,但是98下只顯示圖一所示的對(duì)話框,2000,XP則顯示圖二的對(duì)話框,這是MS在98以后的版本,對(duì)這個(gè)東東重新進(jìn)行了封裝!
詳情請(qǐng)看鏈接: 利用MFC的CFileDialog怎么樣生成Win2000的文件對(duì)話框,
http://www.chinaaspx.com/archive/VC/1068.htm


                            圖二
只要在CFileDialogEX dlg(TRUE)后面,加上如下代碼,就可以顯示圖2效果。


//--------只要加上下面這段代碼,就可以顯示2000下的打開(kāi)文件對(duì)話框-------------
//------用來(lái)檢測(cè)目前的操作系統(tǒng)的版本信息
int nStructSize = 0;
DWORD dwVersion, dwWindowsMajorVersion, dwWindwosMinorVersion;
dwVersion = GetVersion();
dwWindowsMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
dwWindwosMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));
if(dwVersion < 0x80000000)
{
nStructSize = 88; //2k,xp下顯示新的版本
}
else
{
nStructSize = 76; //98下顯示老版本,如圖1
}
dlg.m_ofn.lStructSize = nStructSize; //------用來(lái)檢測(cè)目前的操作系統(tǒng)的版本信息

 

3、m_ofn成員及OPENFILENAME的介紹:
OPENFILENAME結(jié)構(gòu)體:雖然成員變量不少,但是我們常用的就幾個(gè)而已!該結(jié)構(gòu)體包含一些保存或打開(kāi)文件對(duì)話框的重要信息,比如過(guò)濾文件名,指定初始化路徑,對(duì)文件進(jìn)行多選,顯示98風(fēng)格還是2000風(fēng)格的open/save對(duì)話框!

typedef struct tagOFN { // ofn 
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
DWORD lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
} OPENFILENAME;
Members
lStructSize :
指定OPENFILENAME結(jié)構(gòu)體的大?。ㄗ止?jié))。這個(gè)決定你的對(duì)話框顯示98風(fēng)格,還是2k風(fēng)格。
hwndOwner :
指定擁有該對(duì)話框的窗口的標(biāo)識(shí),可以是任何有效窗口的句柄,也可以為空。
hInstance :
當(dāng)在Flags中已經(jīng)設(shè)置OFN_ENABLETEMPLATEHANMDLE標(biāo)志,那么hInstance是一個(gè)包含對(duì)話框模板的內(nèi)存對(duì)象的句柄,假設(shè)OFN_ENABLETEMPLATE標(biāo)志已經(jīng)設(shè)置,那么hInstance標(biāo)識(shí)一個(gè)由lpTemplateName命名的對(duì)話框模板。
lpstrFilter:
指向一個(gè)以一對(duì)“\0”結(jié)尾的過(guò)濾字符串的緩沖區(qū)。在緩沖區(qū)中的最后一個(gè)字符串必定是以兩個(gè)NULL字符結(jié)束。(一般第一個(gè)字符串描述要過(guò)濾的格式,如“Text Files”,第二個(gè)字符串一般過(guò)濾格式進(jìn)行指定,如“*.TXT”)。
如: _T(".JPG .JPEG\0*.jpg;*.jpeg\0.STL\0*.stl\0所有文件 \0 *.*\0 ");
lpstrFile :
指向一個(gè)包含文件名的緩沖區(qū),用來(lái)初始化文件名編輯框。初始化不是必須的,也可以為空。Notice:如果OFN_ALLOWNULTISELECT標(biāo)志已設(shè)定,用戶對(duì)文件進(jìn)行多選,那么該緩沖區(qū)包含所有被選擇的文件名,如果緩沖區(qū)太小,這個(gè)函數(shù)返回FALSE。
nMaxFile:
這個(gè)緩沖區(qū)的大小由lpstrFile指定。
lpstrFileTitle:
指向一個(gè)接收已選擇文件文件名和擴(kuò)展名(不包括路徑信息)的緩沖區(qū),也可以為空。
lpstrInitialDir :
指向一個(gè)指定初始化路徑的字符串,也就是最初彈出時(shí)所顯示的目錄。如果為NULL,則當(dāng)前目錄為初始目錄。
lpstrTitle :
用來(lái)設(shè)置對(duì)話框的標(biāo)題,如果為空,系統(tǒng)會(huì)用默認(rèn)的標(biāo)題(“打開(kāi)” 或 “保存”)。
Flags :
可以設(shè)置一些標(biāo)志或標(biāo)志的組合來(lái)初始化對(duì)話框的顯示外觀。
Flag Meaning
OFN_ALLOWMULTISELECT:這個(gè)標(biāo)志是允許選擇多個(gè)文件,如果你想選擇N個(gè)文件,那么這個(gè)標(biāo)志一定要設(shè)置。
OFN_ENABLEHOOK:允許lpfnHook為對(duì)話框指定一個(gè)HOOK函數(shù),用來(lái)處理對(duì)話框的消息。也就可以攔截我們感興趣的消息。如:CDN_SELCHANGE
OFN_ENABLESIZING: 這個(gè)標(biāo)志設(shè)定后,在對(duì)話框右下角會(huì)出現(xiàn)一個(gè)東東,允許用戶隨意擴(kuò)大和縮小對(duì)話框
OFN_ENABLETEMPLATE:這個(gè)很重要,如果你想加入一個(gè)對(duì)話框模板做為預(yù)覽區(qū), 這個(gè)標(biāo)志一定要設(shè)置。
OFN_EXPLORER:這個(gè)標(biāo)志是最重要的,如果你想定制對(duì)話框模板,利用HOOK函數(shù),對(duì)文件進(jìn)行多選,這個(gè)標(biāo)志必須設(shè)定。
OFN_HIDEREADONLY:隱藏只讀屬性復(fù)選框。
OFN_READONLY:設(shè)定這標(biāo)志,會(huì)在對(duì)話框的下方出現(xiàn)一個(gè)“Read Only”的復(fù)選框。
OFN_SHOWHELP:設(shè)置該標(biāo)志,在對(duì)話框上會(huì)顯示 “幫助”按鈕。

 

lpstrDefExt :
指向一個(gè)包含默認(rèn)擴(kuò)展名的緩沖區(qū)。
lpfnHook:
指向一個(gè)HOOK的處理過(guò)程函數(shù)。在該函數(shù)里實(shí)現(xiàn)攔截我們想要的消息。
lpTemplateName :
指向一個(gè)以對(duì)話框模板資源命名的字符串(以NULL結(jié)尾),該對(duì)話框模板在模塊中由hInstance成員標(biāo)識(shí)。注意:如果想指定一個(gè)對(duì)話框模板資源必須在Flags中設(shè)定OFN_ENABLETEMPLATE。
如: m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG_HOOK)。

4、定制個(gè)性的CFileDialog對(duì)話框:
這個(gè)對(duì)Win98下的對(duì)話框用處比較大(個(gè)人觀點(diǎn)),我在這里不詳細(xì)的說(shuō)明只是給大家一個(gè)鏈接:http://www.codesky.net/article/list.asp?id=3920


5. 怎么樣把預(yù)覽區(qū),放在對(duì)話框的右邊: 有時(shí)候,我們想把預(yù)覽區(qū)放在右邊,而且還想在最下面添加一些控件(如下圖三),該怎么辦呢?當(dāng)時(shí),我找了半天資料也沒(méi)找到,后來(lái)我們老大告訴我應(yīng)該這樣…..


                      圖三
其實(shí)很簡(jiǎn)單,只要加一個(gè)StaticText控件就可以了,注意其ID設(shè)置,我設(shè)為stc32。但是其擺放位置很重要。如果你想要實(shí)現(xiàn)圖三的效果,必須如圖四這樣放置:

                       圖四
如果你想實(shí)現(xiàn)這樣的放置效果,并且復(fù)選框一定要在預(yù)覽區(qū)的下面,如圖五:

                       圖五
則Static text要如圖六這樣放置:

                       圖六
關(guān)于預(yù)覽區(qū)的放置,MSDN上有說(shuō)明,但是我找不到(找了一個(gè)下午)!

6、多選問(wèn)題的解決:
1).使用CFileDialog類選擇多個(gè)文件時(shí),發(fā)現(xiàn)選擇的文件個(gè)數(shù)有限,這是因?yàn)閙_ofn.nMaxFile的值有限:256Btye,解決的辦法是:將m_ofn.lpstrFile的緩沖區(qū)換成自己的指針。選擇多個(gè)文件,首先要給m_ofn的標(biāo)志nFlags加上OFN_ALLOWMULTISELECT。當(dāng)用戶選擇多個(gè)文件,CFileDialog會(huì)把選擇后的文件名拷貝到一個(gè)緩沖區(qū),默認(rèn)這個(gè)緩沖區(qū)有256個(gè)字符,這對(duì)于要求多選的用戶來(lái)說(shuō)是不夠的。你可以將m_ofn.lpstrFile替換成自己的緩沖區(qū)指針:
char sBuffer[2000];
memset(sBuffer, 0, 2000);
CSTLFileDialog dlg(TRUE);
dlg.m_ofn.lpstrFile = sBuffer;
dlg.m_ofn.nMaxFile = 2000; //解決多選問(wèn)題
這個(gè)方法解決多選問(wèn)題,就是簡(jiǎn)便易懂。如果你多選的真好是257或300個(gè)字符,那么其余的1400個(gè)空間易浪費(fèi)了。下面介紹一個(gè)動(dòng)態(tài)解決分配的方法,請(qǐng)看代碼:
//------1.動(dòng)態(tài)分配內(nèi)存空間,解決多選的問(wèn)題---------------------------------------

 

void CSTLFileDialog::SolveMoreSelect()
{
TCHAR chBuffer;
TCHAR *chFiles = NULL;
TCHAR *chFolder = NULL;

UINT nFileSize;
UINT nFolderSize;

nFileSize = CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, &chBuffer,1);
nFolderSize = CommDlg_OpenSave_GetFolderPath(GetParent()->m_hWnd, &chBuffer,1);

if((nFileSize + nFolderSize) > m_ofn.nMaxFile)
{
if(chFiles)
{
delete[] chFiles;
}
chFiles = new TCHAR[nFileSize + 1];
CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFiles, nFileSize);
if(chFolder)
{
delete[] chFolder;
}
chFolder = new TCHAR[nFolderSize + 1];
CommDlg_OpenSave_GetSpec(GetParent()->m_hWnd, chFolder, nFolderSize);
}
else
{
if(chFiles)
{
delete[] chFiles;
chFiles = NULL;
}
if(chFolder)
{
delete[] chFolder;
chFolder = NULL;
}
}

 

7、對(duì)預(yù)覽問(wèn)題的收集,如對(duì)文本,聲音等:
如果您看我的代碼比較困難,請(qǐng)到以下鏈接處:
1)、對(duì)文本文件實(shí)現(xiàn)預(yù)覽:http://www.vckbase.com/document/viewdoc/?id=417
2)、對(duì)圖象文件(2D)實(shí)現(xiàn)預(yù)覽:http://www.codeproject.com/dialog/imagepreviewdialog.asp
3)、對(duì)位圖文件實(shí)現(xiàn)預(yù)覽:http://www.vccode.com/file_show.php?id=891
4)、對(duì)聲音文件實(shí)現(xiàn)預(yù)聽(tīng):http://www.vccode.com/file_show.php?id=895

結(jié)束語(yǔ):
在這里我要感謝幫助過(guò)我的朋友們,希望您對(duì)我寫的文章提出寶貴的意見(jiàn)!另外如果有時(shí)間我的另一篇文章將介紹在CFileDialog的打開(kāi)文件對(duì)話框中,實(shí)現(xiàn)對(duì)3D圖形的預(yù)覽,也就是對(duì)STL(CAD中常用的存儲(chǔ)格式)格式的文件進(jìn)行預(yù)覽,這才是我的要做的!如果表述不清之處,請(qǐng)Email聯(lián)系!

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VC打開(kāi)瀏覽文件對(duì)話框、瀏覽文件夾對(duì)話框
打開(kāi)文件對(duì)話框與目錄選擇對(duì)話框
讓win7的窗口更清楚
孫鑫VC視頻教程筆記之第十二課“文件操作(含注冊(cè)表操作)”
VC小技巧收集(轉(zhuǎn)載自風(fēng)林的家)
MFC編程入門之對(duì)話框:文件對(duì)話框
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服