第七章 对话框 windows程序设计王艳平版

/
// DirDialog.h文件


#ifndef __DIRDIALOG_H_
#define __DIRDIALOG_H_


#include <shlobj.h>


class CDirDialog
{
public:

CDirDialog();
// 显示对话框
BOOL DoBrowse(HWND hWndParent, LPCTSTR pszTitle = NULL);
// 取得用户选择的目录名称
LPCTSTR GetPath() { return m_szPath; }


protected:

BROWSEINFOA m_bi; 


// 用来接受用户选择目录的缓冲区
char m_szDisplay[MAX_PATH];
char m_szPath[MAX_PATH];
};


CDirDialog::CDirDialog()
{

memset(&m_bi, 0, sizeof(m_bi));


m_bi.hwndOwner = NULL;  
m_bi.pidlRoot = NULL;
m_bi.pszDisplayName = m_szDisplay; 
m_bi.lpszTitle = NULL;
m_bi.ulFlags = BIF_RETURNONLYFSDIRS;

m_szPath[0] = '\0';
}


BOOL CDirDialog::DoBrowse(HWND hWndParent, LPCTSTR pszTitle)
{

if(pszTitle == NULL)
m_bi.lpszTitle = "选择目标文件夹";
else
m_bi.lpszTitle = pszTitle;


m_bi.hwndOwner = hWndParent;
LPITEMIDLIST pItem = ::SHBrowseForFolder(&m_bi);
if(pItem != 0)
{
::SHGetPathFromIDList(pItem, m_szPath);
return TRUE;
}


return FALSE;
}


#endif //__DIRDIALOG_H_




/

// CommDlg.cpp文件




#include <windows.h>
#include "resource.h"
#include "DirDialog.h"


BOOL __stdcall DlgProc(HWND, UINT, WPARAM, LPARAM);


int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
int nResult = ::DialogBoxParam(
hInstance, // 实例句柄
(LPCTSTR)IDD_MAIN, // 对话框资源ID号
NULL, // 父窗口句柄
DlgProc, // 消息处理函数
NULL); // 对话框初始化的值,在WM_INITDIALOG消息的lParam参数中取出


return 0;
}


BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG: // 初始化对话框
::SetWindowText(hDlg,"第一个对话框!");
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
::EndDialog(hDlg, IDOK);
break;
case IDCANCEL:
::EndDialog (hDlg, IDCANCEL);
break;
case IDC_FILEBROWSER:
{
char szFileName[MAX_PATH] = "";
OPENFILENAME file = { 0 };
file.lStructSize = sizeof(file);



file.lpstrFile = szFileName;
file.nMaxFile = MAX_PATH;

file.lpstrFilter = "Text Files(*.txt)\0*.txt\0All Files\0*.*\0\0";
file.nFilterIndex = 1;

// 弹出打开文件的对话框
if(::GetOpenFileName(&file))
{
::SetWindowText(::GetDlgItem(hDlg, IDC_FILE), szFileName);
}
}
break;


case IDC_DIRBROWSER:
{
CDirDialog dir;
if(dir.DoBrowse(hDlg))
{
::SetWindowText(::GetDlgItem(hDlg, IDC_DIR), dir.GetPath());
}
}
break;
}
break;
}


return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值