c语言设置字体时调用对话框,windows下C语言调用系统文件选择对话框

代码片段,在windows下用C语言调用文件选择对话框,以备忘

#define DEFAULT_DIR ""

char extraction_path[MAX_PATH] = DEFAULT_DIR;

/*

* Browse for a folder and update the folder edit box

* Will use the newer IFileOpenDialog if *compiled* for Vista or later

*/

void browse_for_folder(void) {

BROWSEINFOW bi;

LPITEMIDLIST pidl;

#if (_WIN32_WINNT >= 0x0600)// Vista and later

WCHAR *wpath;

size_t i;

HRESULT hr;

IShellItem *psi = NULL;

IShellItem *si_path = NULL;// Automatically freed

IFileOpenDialog *pfod = NULL;

WCHAR *fname;

char* tmp_path = NULL;

// Even if we have Vista support with the compiler,

// it does not mean we have the Vista API available

INIT_VISTA_SHELL32;

if (IS_VISTA_SHELL32_AVAILABLE) {

hr = CoCreateInstance(&CLSID_FileOpenDialog, NULL, CLSCTX_INPROC,

&IID_IFileOpenDialog, (LPVOID)&pfod);

if (FAILED(hr)) {

dprintf("CoCreateInstance for FileOpenDialog failed: error %X", hr);

pfod = NULL;// Just in case

goto fallback;

}

hr = pfod->lpVtbl->SetOptions(pfod, FOS_PICKFOLDERS);

if (FAILED(hr)) {

dprintf("Failed to set folder option for FileOpenDialog: error %X", hr);

goto fallback;

}

// Set the initial folder (if the path is invalid, will simply use last)

wpath = utf8_to_wchar(extraction_path);

// The new IFileOpenDialog makes us split the path

fname = NULL;

if ((wpath != NULL) && (wcslen(wpath) >= 1)) {

for (i=wcslen(wpath)-1; i!=0; i--) {

if (wpath[i] == L'\\') {

wpath[i] = 0;

fname = &wpath[i+1];

break;

}

}

}

hr = (*pSHCreateItemFromParsingName)(wpath, NULL, &IID_IShellItem, (LPVOID)&si_path);

if (SUCCEEDED(hr)) {

if (wpath != NULL) {

hr = pfod->lpVtbl->SetFolder(pfod, si_path);

}

if (fname != NULL) {

hr = pfod->lpVtbl->SetFileName(pfod, fname);

}

}

safe_free(wpath);

hr = pfod->lpVtbl->Show(pfod, hMain);

if (SUCCEEDED(hr)) {

hr = pfod->lpVtbl->GetResult(pfod, &psi);

if (SUCCEEDED(hr)) {

psi->lpVtbl->GetDisplayName(psi, SIGDN_FILESYSPATH, &wpath);

tmp_path = wchar_to_utf8(wpath);

CoTaskMemFree(wpath);

if (tmp_path == NULL) {

dprintf("Could not convert path");

} else {

safe_strcpy(extraction_path, MAX_PATH, tmp_path);

safe_free(tmp_path);

}

} else {

dprintf("Failed to set folder option for FileOpenDialog: error %X", hr);

}

} else if ((hr & 0xFFFF) != ERROR_CANCELLED) {

// If it's not a user cancel, assume the dialog didn't show and fallback

dprintf("could not show FileOpenDialog: error %X", hr);

goto fallback;

}

pfod->lpVtbl->Release(pfod);

return;

}

fallback:

if (pfod != NULL) {

pfod->lpVtbl->Release(pfod);

}

#endif

INIT_XP_SHELL32;

memset(&bi, 0, sizeof(BROWSEINFOW));

bi.hwndOwner = hMain;

bi.lpszTitle = L"Please select the installation folder:";

bi.lpfn = browseinfo_callback;

// BIF_NONEWFOLDERBUTTON = 0x00000200 is unknown on MinGW

bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS |

BIF_DONTGOBELOWDOMAIN | BIF_EDITBOX | 0x00000200;

pidl = SHBrowseForFolderW(&bi);

if (pidl != NULL) {

CoTaskMemFree(pidl);

}

}

Windows下C语言调用dll动态链接库

dll是windows下的动态链接库文件,下面记录一下在windows下如何调用C语言开发的dll动态链接库. 1.dll动态链接库的源代码 hello_dll.c #include "st ...

Windows下C语言的Socket编程例子(TCP和UDP)

原文:Windows下C语言的Socket编程例子(TCP和UDP) 刚刚学windows编程,所以想写学习笔记,这是一个简单的Socket程序例子,开发环境是vc6: 首先是TCP server端: ...

windows下R语言在终端的运行

在windows下可以有多种方式来运行R,R导论的这些章节给出一些详细的指导. 通常在环境变量离包含R的安装目录类似于R\R-3.1.2\bin\x64的情况下,就可以在CMD下运行R程序了 注意我这 ...

windows下C语言编程获取磁盘(分区)使用情况

windows下编程获取磁盘(分区)使用情况 windows下编程获取磁盘(分区)使用情况 GetLogicalDriveStrings函数 使用示例 获取需要的缓冲区长度示例 获取所有驱动器号示例 ...

windows下使用c++调用redis

不废话,unix下c++调用 redis可以看这个: http://blog.csdn.net/youngqj/article/details/8266177 ==================== ...

【数据库开发】windows下使用c++调用redis

不废话,unix下c++调用 redis可以看这个: http://blog.csdn.net/youngqj/article/details/8266177 ==================== ...

【转】windows下安装和调用curl的方法

本文转自:http://1316478764.iteye.com/blog/2100778 curl是利用URL语法在命令行方式下工作的开源文件传输工具.它支持很多协议:FTP, FTPS, HTTP ...

windows下使用批处理调用exe和服务

手动调用exe或者启动服务很麻烦,可以使用.bat批处理文件,双击运行即可.步骤如下:创建一个新的txt文件但是保存成.bat结尾的文件(选择用记事本打开编写命令),输入代码内容格式如下: @echo ...

windows下的IO模型之选择(select)模型

1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作. 选择模型的核心是FD_SET集合和select函数.通过该函数,我们可以 ...

随机推荐

基于easyUI实现组织结构树图形

一. 准备工作 1. 点击此下载相关文件 2. 进入 js 文件夹,解压缩 jquery-easyui-1.5.rar 到当前文件夹 二. 在浏览器中运行 organize.html 文件,即可看到效 ...

封装DB类

封装DB类     一般一个类单独书写在一个Php文件中,为了见名知意,会对文件名有一个规范:类名.class.php 第1步:     创建DB类 第2 步:     属性设计 第3步:     初 ...

03-树1. List Leaves (25)

Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...

video字幕无法显示,video视频在google中无法控制快进

video字幕(track)无法显示: 直接用关闭同源策略的浏览器打开你的HTML文件可以请求到字幕文件并显示字幕: 从hbuilder中打开html文件,在从里面打开google浏览器去浏览HTML ...

高通HAL层之bmp18x.cpp

继续上一个链接内容所讲:http://www.cnblogs.com/linhaostudy/p/8430583.html 下面bmp18x sensor为例进行分析. BMP18x Sensor: ...

将本地jar包打包到本地仓库和上传到私服

1.本地jar打包到本地仓库 mvn install:install-file -Dfile=jar包完整地址或相对地址 -DgroupId=自定义的groupID -DartifactId=自定义的 ...

MySQL三层循环

begindeclare i int;  #定义i变量declare j int;  #定义j变量declare k int;  #定义k变量set i=1;set j=1;set k=1;while ...

Keil5下载STM32库

1.http://www.keil.com/dd2 2.3.以STM32L051C8为例 下载即可.

Java基础之this关键字的作用

this关键字主要存在三种应用 1.this调用本类中的属性,也就是说调用类中的成员变量: 2.this调用本类中的其他方法: 3.this调用本类中的其他构造方法,调用时要放在构造方法的首行,否则会 ...

安装Tensorflow过程pip安装报错:is not a supported wheel on this platform

安装Tensorflow过程pip安装报错:is not a supported wheel on this platform 通过pip安装wheel镜像时,安装指令为: pip install - ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值