MFC之“图种生成器制作”笔记(二)

来源:互联网 发布:淘宝白菜价在哪 编辑:程序博客网 时间:2024/06/05 20:56

对话框的“关于”图标显示:

如果没有显示,应将图标的ID导入进来(如高亮部分)。

CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)
 : CDialog(CMyDlg::IDD, pParent)
{
  m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);//加载图标
}

 

VC++6.0中MFC编程时写出一个对象不显示该对象的成员函数解决办法:在工程文件夹下找到一个文件(工程名.ncb), 如果有:先退出工程,然后把“工程名.ncb”删除掉,重新打开VC++6.0,然后就可以出现提示了。

 

 

在MFC中怎样使用DOS命令

第一种方法:system("执行的命令");

第二种方法(本次采用):

      WinExec((LPCSTR)cmd,SW_HIDE)

实例:

     CString cmd=_T("cmd /c");

cmd+="copy /b D:pic.jpg + D:pic.rar D:aim.jpg";

    WinExec((LPCSTR)cmd,SW_HIDE);

其中SW_HIDE 的作用是在执行这条语句时,那个黑色的命令窗口被隐藏。

 

选择文件路径的实现方法

实例:

char szFileFilter[]="压缩文件(*.rar)|*.rar|"

                                 "所有文件(*.*)|*.*|";

//上一句的目的是为了过滤文件

CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);

CString strFilePath;

if(dlg.Domodal()==IDOK)

{

strFilePath=dlg.GetPathName();

CopyFile(strFilePath,"D:\pic.rar",false);

}

 

保存文件路径的方法

同选择文件路径的方法类似,需要改的地方时

CFileDialog(false,"jpg",NULL,OPN_HIDEREADONLY,szFileFilter)

 

隐藏关闭按钮的方法

在初始化函数里加入以下代码:

SetWindowLong(this->m_hWnd,GWL_STYLE,GetWindowLong(this->m_hWnd,GWL_STYLE)&~WS_SYSMENU);       //隐藏关闭按钮

 

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。
当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。

文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:

CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
参数意义如下:
bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
lpszDefExt 指定默认的文件扩展名
lpszFileName 指定默认的文件名。
dwFlags 指明一些特定风格
lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
pParentWnd 为父窗口指针。
 

 

CString 是MFC或者ATL中的实现,string是C++标准库中的实现string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。
 
设置对话框中控件的文本和标题。SetDlgItemText
BOOL  SetDlgltemText(HWND hDlg,int nlDDlgltem,LPCTSTR IpString);
hDlg:指定含有控件的对话框。
nlDDlgltem:标识带有将被设置的标题和文本的控件。
IpString:指向一个以NULL结尾的字符串指针,该字符串指针包含了将被复制到控件的文本。
返回值:如果函数调用成功,则返回值为非零值。如果函数调用失败,则返回值为零。
 
复制文件CopyFile
BOOL CopyFile(LPCTSTR lpExistingFileName,LPCTSTR lpNewFileName,BOOL bFailIfExists );
参数类型及说明 :
lpExistingFileName ,源文件名
lpNewFileName ,目标文件名
bFailIfExists ,如果设为TRUE(非零),那么一旦目标文件已经存在,则函数调用会失败。否则目标文件被改写。
 

void CMyDlg::Onpicchoice()
{
 char szFileFilter[]="图片文件(*.jpg)|*.jpg|"
      "所有文件(*.*)|*.*|";
 CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
 if(dlg.DoModal()==IDOK)
 {
  strpicpath=dlg.GetPathName();
  SetDlgItemText(IDC_picpath,strpicpath);
  CopyFile(strpicpath,"D:pic.jpg",false);
 }
 
}

void CMyDlg::Onrarchoice()
{
 char szFileFilter[]="压缩文件(*.zip)|*.zip|"
      "所有文件(*.*)|*.*|";
 CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
 if(dlg.DoModal()==IDOK)
 {
  strrarpath=dlg.GetPathName();
  SetDlgItemText(IDC_rarpath,strrarpath);
  CopyFile(strrarpath,"D:pic.zip",false);
 }
 
 
}


void CMyDlg::Onaimchoice()
{
 CString cmd=_T("cmd /c");
 cmd+="copy /b D:pic.jpg + D:pic.zip D:aim.jpg";       //这里加入要执行的DOS指令
 WinExec((LPCSTR)cmd,SW_HIDE);

 char szFileFilter[]="图片文件(*.jpg)|*.jpg|"
      "所有文件(*.*)|*.*|";
 CFileDialog dlg(false,"jpg",NULL,OFN_HIDEREADONLY,szFileFilter);
 if(dlg.DoModal()==IDOK)
 {
  straimpath=dlg.GetPathName();
  SetDlgItemText(IDC_aimpath,straimpath);
  if(CopyFile("D:aim.jpg",straimpath,false))
  {
   MessageBox("图种已经生成!","结果");
  }
  else
  {
   MessageBox("请先选择图片文件和压缩文件!","警告");
  }
  
 }
  
}

0 0