同样是另存为,为什么对话框样子不一样

yunhaiC QQ654777694 2015-02-12 10:53:12

上面这张图是用savefiledialog建立的对象显示出来的

下面这张图是对方软件的


问题:为什么不一样呢,怎么让C#也能做的跟下面的一样,有没什么简洁一点的方式,比如什么类或者设置什么属性了?
...全文
963 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
newerC 2015-02-28
  • 打赏
  • 举报
回复
改进一下

char c_filename[256];
memset(c_filename,0,256);
OPENFILENAME ofn;
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize = sizeof(ofn);//或者直接指定为OPENFILENAME_SIZE_VERSION_400 ;
ofn.Flags = OFN_FILEMUSTEXIST|OFN_EXPLORER;

if (ofn.lStructSize == OPENFILENAME_SIZE_VERSION_400)
{
	//msdn : For compatibility reasons, the Places Bar is hidden if Flags is set to OFN_ENABLEHOOK and lStructSize is OPENFILENAME_SIZE_VERSION_400.
	ofn.Flags |= OFN_ENABLEHOOK;
}
else
{
	ofn.FlagsEx = OFN_EX_NOPLACESBAR;
}

ofn.hwndOwner = NULL;
ofn.hInstance = NULL;
ofn.lpstrFilter = "txt file(*.txt)|*.txt\0";
ofn.lpstrFileTitle = c_filename;
ofn.nMaxFileTitle = 256;
ofn.lpstrFile = c_filename;
ofn.nMaxFile = 256;
ofn.lpstrTitle = "另存为";
GetSaveFileName(&ofn);
 
newerC 2015-02-28
  • 打赏
  • 举报
回复

char c_filename[256];
memset(c_filename,0,256);
OPENFILENAME ofn;
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400; //关键是这里.
ofn.hwndOwner = NULL;
ofn.hInstance = NULL;
ofn.lpstrFilter = "txt file(*.txt)|*.txt\0";
ofn.lpstrFileTitle = c_filename;
ofn.nMaxFileTitle = 256;
ofn.lpstrFile = c_filename;
ofn.nMaxFile = 256;
ofn.lpstrTitle = "Select a file to open...";
ofn.Flags = OFN_FILEMUSTEXIST|OFN_ENABLEHOOK|OFN_EXPLORER; //OFN_ENABLEHOOK这个也要指定
//ofn.lpfnHook = OFNHookProcOldStyle; //这句可以不要?!!
GetSaveFileName(&ofn); 
发现msdn这个API解释不是一般的麻烦啊.
newerC 2015-02-28
  • 打赏
  • 举报
回复
引用 28 楼 caozhy 的回复:
后者在C#可以用Windows API实现,指定ofn结构体size为4.0格式,去掉placebar就可以。
貌似你说的前半部分是对的,后半部分根据msdn的说法是不对的。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839%28v=vs.85%29.aspx Remarks For compatibility reasons, the Places Bar is hidden if Flags is set to OFN_ENABLEHOOK and lStructSize is OPENFILENAME_SIZE_VERSION_400. To 楼主: 我说错了,OFN_EXPLORER不指定的话,样式是win98的:(
  • 打赏
  • 举报
回复
引用 25 楼 newerC 的回复:
第一张图是xp样式 第二张图是2k样式 使用api GetSaveFileName 不指定 OFN_EXPLORER 标志位就是使用win2k样式
ofn.lFlags = OFN_ALLOWMULTISELECT | OFN_CREATEPROMPT | OFN_DONTADDTORECENT | OFN_ENABLEHOOK | OFN_ENABLEINCLUDENOTIFY | OFN_ENABLESIZING | OFN_ENABLETEMPLATE | OFN_ENABLETEMPLATEHANDLE | OFN_EXTENSIONDIFFERENT | OFN_FILEMUSTEXIST | OFN_FORCESHOWHIDDEN | OFN_HIDEREADONLY | OFN_LONGNAMES | OFN_NOCHANGEDIR | OFN_NODEREFERENCELINKS | OFN_NOLONGNAMES | OFN_NONETWORKBUTTON | OFN_NOREADONLYRETURN | OFN_NOTESTFILECREATE | OFN_NOVALIDATE | OFN_OVERWRITEPROMPT | OFN_PATHMUSTEXIST | OFN_READONLY | OFN_SHAREAWARE | OFN_SHOWHELP; 不制定你说的标志位,对话框不能弹出
  • 打赏
  • 举报
回复
up~谁能给个例子呢,谢谢
xtung 2015-02-15
  • 打赏
  • 举报
回复
准备发布一款自定义对话框类,有兴趣联系我哦:
  • 打赏
  • 举报
回复
引用 25 楼 newerC 的回复:
第一张图是xp样式 第二张图是2k样式 使用api GetSaveFileName 不指定 OFN_EXPLORER 标志位就是使用win2k样式
引用 28 楼 caozhy 的回复:
后者在C#可以用Windows API实现,指定ofn结构体size为4.0格式,去掉placebar就可以。
你好,我觉得你们方法是对的,就是不太会用C#调用这个API,有些参数不知道该怎么写,能否给一个调用这个API的例子,带参数的。
threenewbee 2015-02-14
  • 打赏
  • 举报
回复
后者在C#可以用Windows API实现,指定ofn结构体size为4.0格式,去掉placebar就可以。
失落的神庙 2015-02-14
  • 打赏
  • 举报
回复
这两个都是 文件选择框。 只是风格不一样。 像c#中 默认都是 第一张图片的风格。 VB。e 等语音编译出来 都是 第二张图片的风格。 这个没多大必要去纠结简洁问题。 或许你可以去msdn 去找找 看看 .net有没有对此分格设定的属性或方法。
Delta 2015-02-14
  • 打赏
  • 举报
回复
呵呵,又知道了不少东西。。。。。。
  • 打赏
  • 举报
回复
这种情况只可能是与系统风格有关的吧,编程上如果没做特别处理,风格应该是一致的!
newerC 2015-02-14
  • 打赏
  • 举报
回复
第一张图是xp样式 第二张图是2k样式 使用api GetSaveFileName 不指定 OFN_EXPLORER 标志位就是使用win2k样式
huanglin03 2015-02-13
  • 打赏
  • 举报
回复
我只知道VC中可以个性化定制系统里的CFileDialog
北京的雾霾天 2015-02-13
  • 打赏
  • 举报
回复
可以自己实现对话框,因为.net里没有开放这个扩展的样式,实际上.net也是大致这样实现的。代码参考:https://code.csdn.net/snippets/604162
於黾 2015-02-12
  • 打赏
  • 举报
回复
引用 11 楼 yunhaiC 的回复:
[quote=引用 10 楼 wanghui0380 的回复:] 如果是外观,你可以设置AutoUpgradeEnabled 属性,让他不根据系统设置更改外观
国宝大侠,设置这个好像没作用啊,左边那块没去掉,那是存在[/quote] 左边是另一个问题 你先看按钮风格和图片是否都变一致了
tcmakebest 2015-02-12
  • 打赏
  • 举报
回复
对于这个显示样式,楼主大可不必在意,.net大概也认为去掉旁边的快捷方式没有多少意义. 在DELPHI上倒是可以设置两种样式,语句是: SaveDialog1.OptionsEx:=[ofExNoPlacesBar];
  • 打赏
  • 举报
回复
引用 10 楼 wanghui0380 的回复:
如果是外观,你可以设置AutoUpgradeEnabled 属性,让他不根据系统设置更改外观
国宝大侠,设置这个好像没作用啊,左边那块没去掉,那是存在
wanghui0380 2015-02-12
  • 打赏
  • 举报
回复
如果是外观,你可以设置AutoUpgradeEnabled 属性,让他不根据系统设置更改外观
wanghui0380 2015-02-12
  • 打赏
  • 举报
回复
哦,我看错图了,原来你是说左边那块!那把我滴回复忽略掉把
wanghui0380 2015-02-12
  • 打赏
  • 举报
回复
额,倒塌! 第二张图就是你默认拖出来滴 至于第一张图那是你自己设置了过滤选项滴,所以你自己把过滤选项属性清掉就ok了 (ps:代码都是你自己写滴,你咋就不记得你自己设置了过滤项呢)
加载更多回复(15)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧