快速浏览文件夹

Browse for folder quickpick window 介绍 我从事SizeMe项目当用户请求的一个特性。他要求一个预定义列表目录,他希望扫描。我刚刚读完了这篇文章定制“浏览文件夹”对话框,我的想法只是定制通用对话框。这里是结果。记住,普通对话框所示的安装语言窗口。这张照片显示的对话框和挪威的语言。我也想谢谢汉斯·迪特里希他的文章为SHBrowseForFolder XBrowseForFolder——包装器。的一些代码中使用该项目一直受到他的工作。 使用的代码 该项目可用于一个MFC项目或Win32。(该项目只有与Visual Studio 6.0测试环境。我不知道它将新版本的Visual Studio工作,但我想是这样的)。 第一个文件Dirbrowse.cpp和DirBrowse.h添加到您的项目,然后包括DirBrowse.h。有两个公共功能,您需要使用: 隐藏,复制Code

BOOL Show(char *szInitDir="");

函数显示的结果如果用户按下OK,和假取消/关闭。szInitDir是可选的,选择的startdir浏览器。 隐藏,复制Code

char* GetSelectedDir();

GetSelectedDir函数返回一个字符串的选择路径。 样本 这是我写的快速win32示例处理类: 隐藏,复制Code

#include <spanclass="code-string">"stdafx.h"</span>
#include <spanclass="code-string">"..\DirBrowse.h"</span>

#include <spanclass="code-keyword"><stdio.h></span>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
     // TODO: Place code here.
    CDirBrowse m_dirbrowser(NULL, hInstance);
    
    if(m_dirbrowser.Show()==TRUE)
    {
        char Text[MAX_PATH*2];
        sprintf(Text, "You selected folder: %s", m_dirbrowser.GetSelectedDir());
        MessageBox(NULL, Text, "Browse for folder", MB_OK);
    }
    else
    {
        MessageBox(NULL, "You pressed the cancel button!", "Browse for folder", MB_OK);
    }

    return 0;
}

它是那么简单。看看这个项目检查的MFC版本相同。 头定制 当我创建的类可以重用,我总是创建很多#定义。这门课也不例外。这是定义列表: 隐藏,收缩,复制Code

//#1
#define BROWSE_WIDTH            640
#define BROWSE_HEIGHT            420
#define BROWSE_LISTVIEW_SIZE        0.65
#define BROWSE_BORDER_VERT        4
#define BROWSE_BORDER_HORI        2
#define BROWSE_MAXENTRIES        20

//#2
//This is the message that we start with
#define BROWSE_MESSAGE            10101

//#3
//The name of our hypertext class
#define STATIC_HYPERTEXT_WINDOW_CLASS    "STATIC_HYPERTEXT"

//#4
//This is the font & size we use for showing the info
#define BROWSE_FONTNAME            "Verdana"
#define BROWSE_FONTSIZE            12

//#5
//The colors used
#define BROWSE_SELECTCOLOR        RGB(0,0,255)
#define BROWSE_SELECTCOLORHOVER        RGB(50,105,255)
#define BROWSE_DIRCOLOR            RGB(0,0,200)
#define BROWSE_DIRCOLORHOVER        RGB(100,100,250)

//#6
//The registry variables
#define BROWSE_REGISTRY_ROOT        HKEY_CURRENT_USER
#define BROWSE_REGISTRY_PATH        "Software\\DirBrowser"

//#7
//Strings used
#define BROWSE_TEXT_SHORTCUTS       "Shortcuts"
#define BROWSE_TEXT_HELP            "Please select a folder in the list and press the
                                    arrow to save the directory for a quickpick later on"
#define BROWSE_TEXT_HELP_CAPTION    "Browse for folder help"

#define BROWSE_TEXT_HELP_TOOLTIP    "Press this to save selected path as a shortcut"
                                    //Must not exceed 79 chars!!! 

每组如下解释: 定义了描述默认值组# 1 BROWSE_WIDTH BROWSE_HEIGHT, BROWSE_LISTVIEWSIZE宽度/高度是窗口的大小。ListView-size是目录的宽度的百分比。640、420、0.65(宽度的百分比)BROWSE_BORDER_VERT BROWSE_BORDER_HORI边界变量之间像素控制在垂直和水平方向上。4,2 BROWSE_MAXENTRIES MaxEntries快速选择的大小我们可以显示在屏幕上(不应该比屏幕可以显示条目)20(应该足以让每个人)组# 2 BROWSE_MESSAGE信息是内部消息,我们使用的控件。使用增加,所以它开始于10101年,10102年和10101年组# 3 STATIC_HYPERTEXT_WINDOW_CLASS超文本窗口类是类的内部名称处理hypertext-class。只是改变这个项目中如果你有重复的名字。“STATIC_HYPERTEXT”组# 4 BROWSE_FONTNAME BROWSE_FONTSIZE这个字体,大小超文本中使用的类。它不会检查字体确实存在,所以一定要输入一个有效的名字。Verdana, 12组# 5 BROWSE_SELECTCOLOR BROWSE_SELECTCOLORHOVER, BROWSE_DIRCOLOR BROWSE_DIRCOLORHOVER颜色超文本类。实际上分为选择器和目录。RGB (0, 0255), RGB (50105255), RGB (0, 0200), # 6 BROWSE_REGISTRY_ROOT RGB(100100250)组,BROWSE_REGISTRY_PATH通往你想要保存配置。这通常是改变因为你不想dirbrowser加载变量存储在同一个地方不同的项目中使用。HKEY_CURRENT_USER,“软件\ \ DirBrowser”(这总是应该改变!)组# 7 BROWSE_TEXT_SHORTCUTS BROWSE_TEXT_HELP、BROWSE_TEXT_HELP_CAPTION BROWSE_TEXT_HELP_TOOLTIP以来我没有犯了一个“多语言”支持在这个项目中,你可以改变这里使用的文本。“快捷方式”,“请在列表中选择一个文件夹,按箭头来保存的目录quickpick之后”,“浏览文件夹的帮助”,“按下这个选择保存路径作为快捷方式”(不得超过79字符) 的利益点 我发现了一个小错误而编译项目的发布版本。看看这段代码: 隐藏,复制Code

if(pMe->MessageIsOdd == FALSE)
{
    if(nID % 2 == 0)
        MsgIsOdd = FALSE;
    else
        MsgIsOdd = TRUE;
}
else
{
    if(nID % 2 == 0)
        MsgIsOdd = TRUE;
    else
        MsgIsOdd = FALSE;
}

不应该有任何错误,但一些研究之后,我发现的第一部分if-sentence是唯一一个被调用。我需要把它为了避免这种错误是这样的: 隐藏,复制Code

if(pMe->MessageIsOdd == FALSE)
{
    //...
}
if(pMe->MessageIsOdd == TRUE)
{
    //...
}

如果有人有答案,请让我知道。我使用Visual Studio 6.0 c++ SP5 + UINT64处理器包补丁。 历史 v1.0,最初版本 本文转载于:http://www.diyabc.com/frontweb/news6912.html

posted @ 2020-08-10 02:38  Dincat  阅读(382)  评论(0编辑  收藏  举报