默认情况下,打开对话框的文件列表的样式是列表样式,要实现一打开放大框就自动是大图标风格,需要在打开对话框显示在屏幕上以前,找到该文件列表控件(SysListView32)的句柄,然后改变其风格就可以了。
标准ListView控件有四种样式,分别如下:
LVS_ICON 0x0000 大图标样式
LVS_REPORT 0x0001 详细资料样式
LVS_SMALLICON 0x0002 小图标样式
LVS_LIST 0x0003 列表样式
以前ccrun曾在csdn回答过一位网友的问题,正好有一些代码,比较简单,ccrun就没有加注释。嘿嘿。
在Form上放置一个TButton,一个TOpenDialog。然后添加以下代码:
.h 文件中:
public: // User declarations
void __fastcall OpenDialogShow(TObject *Sender);
void __fastcall OpenDialogClose(TObject *Sender);
.cpp 文件中:
//---------------------------------------------------------------------------
FARPROC OldDlgOpenProc = NULL;
static LRESULT CALLBACK NewDlgOpenProc(
HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
//---------------------------------------------------------------------------
static LRESULT CALLBACK NewDlgOpenProc(
HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_UPDATEUISTATE)
{
HWND hShell = FindWindowEx(GetParent(hWnd), NULL, "SHELLDLL_DefView", NULL);
HWND hListView = FindWindowEx(hShell, NULL, "SysListView32", NULL);
if(hListView)
{
SetWindowLong(hListView, GWL_STYLE,
GetWindowLong(hListView, GWL_STYLE) & 0xFFFFFFF0 | LVS_ICON);
}
}
return CallWindowProc((FARPROC)OldDlgOpenProc, hWnd, uMsg, wParam, lParam);
}
//---------------------------------------------------------------------------
// 本文来自 http://www.ccrun.com
// 欢迎光临 C++ Builder 研究
// 作者: ccrun(老妖)
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
OpenDialog1->OnClose = OpenDialogClose;
OpenDialog1->OnShow = OpenDialogShow;
Button1->OnClick = Button1Click;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
OpenDialog1->Execute();
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OpenDialogShow(TObject *Sender)
{
OldDlgOpenProc = (FARPROC)SetWindowLong(
OpenDialog1->Handle, GWL_WNDPROC, (long)NewDlgOpenProc);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::OpenDialogClose(TObject *Sender)
{
SetWindowLong(OpenDialog1->Handle, GWL_WNDPROC, (long)OldDlgOpenProc);
}
//---------------------------------------------------------------------------
后来ccrun偶然发现,还有更简单的方法:
//---------------------------------------------------------------------------
// 本文来自 http://www.ccrun.com
// 欢迎光临 C++ Builder 研究
// 作者: ccrun(老妖)
const DWORD FCIDM_SHVIEW_LARGEICON = 28713; // 大图标模式
const DWORD FCIDM_SHVIEW_SMALLICON = 28714; // 小图标模式
const DWORD FCIDM_SHVIEW_LIST = 28715; // 列表模式
const DWORD FCIDM_SHVIEW_REPORT = 28716; //
const DWORD FCIDM_SHVIEW_THUMBNAIL = 28717; // XP only
const DWORD FCIDM_SHVIEW_TILE = 28718; // XP
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{
// 指定打开对话框在显示出来时执行的事件
OpenDialog1->OnShow = dlgOpenOnShow;
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::WndProc(TMessage &Msg)
{
// 重载WndProc实现消息的自定义处理
if(Msg.Msg == WM_USER + 1)
{
// 文件列表是一个ListView控件,其父控件关系如下:
// TOpenDialog-->SHELLDLL_DefView-->SysListView32
HWND hDlg = (HWND)Msg.WParam;
HWND hCtrl = FindWindowEx(hDlg, NULL, "SHELLDLL_DefView", NULL);
if(hCtrl != NULL)
// 向SHELLDLL_DefView控件发送 WM_COMMAND 消息
// 关键是wParam参数,指定ListView的样式
SendMessage(hCtrl, WM_COMMAND, FCIDM_SHVIEW_LARGEICON, 0); // 大图标
}
TForm::WndProc(Msg);
}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::dlgOpenOnShow(TObject *Sender)
{
// 当打开对话框显示出来时发送自定义消息到窗体
HWND hDlg = GetParent(((TOpenDialog *)Sender)->Handle);
PostMessage(Handle, WM_USER + 1, (WPARAM)hDlg, 0);
}
//---------------------------------------------------------------------------
// 测试代码:
void __fastcall TfrmMain::Button1Click(TObject *Sender)
{
// Show出打开对话框
OpenDialog1->Execute();
}
相关推荐
震荡波病毒情况介绍
lsass漏洞及关于W32.Worm.Sasser病毒情况介绍 2004.5. 1起互联网上出现了一个新的高威胁病毒——Worm.Sasser。该病毒会对被感染的机器(WinNT、Win2000、WinXP、Win2003操作系统)造成巨大的危害。 病毒的危害和传播:Worm.Sasser病毒利用Windows平台的Lsass漏洞,进行传播。可能会导致被感染的机器无法正常使用,直至...
VC 对话框最大化显示
在onitidialog函数中 CRect rectDeskTop; WINDOWPLACEMENT wpnew; GetWindowPlacement(&wpnew); ::GetWindowRect(::GetDesktopWindow(), rectDeskTop); ::AdjustWindowRectEx(rectDeskTop, GetStyle(), F...
Windows内存占用过高排查与优化:从任务管理器到内核泄漏的完整解决方案
内存管理是操作系统核心功能之一,它负责在物理内存与虚拟内存之间高效调度数据,确保应用程序稳定运行。其原理涉及工作集、分页缓冲池、非分页缓冲池等内核机制,当驱动程序或应用存在内存泄漏时,会导致非分页缓冲池异常增长,引发系统卡顿。理解这些概念对系统性能调优至关重要,尤其在开发、数据库服务等资源密集型场景中。本文聚焦Windows系统内存占用过高的典型问题,如任务管理器内存和实际内存占用对不上、非分页缓冲池泄漏等,通过资源监视器、RAMMap等工具进行深度诊断,并提供从虚拟内存配置到启动项管理的实践方案,帮助用户
MFC打开文件对话框
原文地址::http://blog.chinaunix.net/uid-14827902-id-3058983.html 相关网帖 1、MFC打开/保存文件对话框:CFileDialog----http://www.cnblogs.com/jcss2008/archive/2008/10/10/1308301.html CFileDialog类封装了
Win10运行红色警戒2黑屏原因与DirectPlay修复方案
DirectPlay是Windows早期用于游戏网络和音频通信的核心API组件,其设计初衷是为《红色警戒2》等DirectX 8时代游戏提供跨平台联机与多媒体支持。随着Windows 10逐步移除Legacy API支持,DirectPlay被逻辑剔除而非简单禁用,导致依赖硬编码CLSID调用和GDI+DirectDraw混合渲染的老游戏启动失败。该技术断层引发黑屏、闪退、初始化失败等典型问题,本质是COM注册缺失、DLL加载策略变更与DWM图形管理冲突共同作用的结果。通过重建DirectPlay CLSI
Windows 11用户账户切换与Win+F4快捷键解析
Windows操作系统通过会话管理机制实现多用户环境支持,其核心原理涉及Winlogon进程和LSA认证模块的协同工作。系统快捷键作为提升效率的工程实践方案,Win+F4组合键在Windows 11中展现出特殊的会话管理行为,既关联关机对话框又可能触发用户切换功能。通过注册表分析和AutoHotkey工具可深入理解快捷键映射机制,这种技术方案在家庭多用户共享和企业IT管理中具有重要应用价值。文章结合Windows 11最新特性,详解了包括快速用户切换在内的实用技巧,并提供了性能优化方案。
CCS 5.5 Win7安装教程:构建稳定DSP交叉编译环境
Code Composer Studio(CCS)是TI官方推出的嵌入式C/C++集成开发环境,核心用于TMS320系列DSP芯片的程序开发、调试与烧录。其本质是一套深度耦合的交叉编译工具链,包含Eclipse前端、专用C2000/C6000编译器及XDS仿真器驱动栈。在Windows 7平台,CCS 5.5因精准匹配JDK 1.6.0_26、精简Eclipse插件、适配WDM驱动模型等设计,成为F28379等C2000芯片最稳定的开发环境。它规避了新版CCS对系统资源的高消耗,也解决了旧版CCS 4.x对
Windows 11文件夹无法重命名问题解决方案
在Windows系统中,文件资源管理器(Explorer.exe)是管理文件和文件夹的核心组件。当遇到文件夹重命名失败时,通常涉及系统权限、进程异常或第三方程序冲突等底层机制。理解Windows文件系统的权限控制原理和进程管理机制,能有效解决这类文件操作问题。特别是在Windows 11系统中,随着系统更新和安全策略调整,这类问题更为常见。通过获取完全控制权限、重启Explorer进程或使用命令行工具等工程实践方法,可以快速恢复文件管理功能。这些解决方案不仅适用于文件夹重命名问题,对解决其他文件操作异常也有
Photoshop卡顿根因与Win11 CPU调度优化方案
Photoshop作为专业图像处理软件,其性能表现高度依赖CPU调度效率与系统底层协同。当出现启动卡顿、响应延迟、风扇狂转等现象时,本质是Adobe云架构进程(如AdobeIPCBroker、CCXProcess)与Windows 10/11现代调度机制(如Hybrid Scheduler、Core Isolation、WARP GPU调度)发生资源争抢。这类问题并非硬件不足所致,而是多线程轮询、字体扫描I/O、GPU加速路径错配及内核级优先级冲突共同引发的系统级性能衰减。通过进程限流、服务精简、GPU直通
Win10开始菜单点不动?鼠标侧键卡住是隐形元凶
在使用Windows系统时,桌面出现“半死”状态——鼠标指针能动,但点击开始菜单、任务栏或桌面图标均无响应,是不少用户遭遇过的棘手问题。这种故障常被误判为系统崩溃或软件冲突,实则可能与鼠标侧键的物理卡键或微动开关老化有关。当鼠标按键持续发送“按住”信号时,Windows的输入队列会被干扰,导致窗口焦点锁定,仅当前活动窗口可操作。通过分步排查:先区分全局锁死与局部失灵,再借助按键检测工具或替换鼠标验证,即可快速定位根因。掌握正确的故障排查顺序,不仅能节省大量时间,还能避免误重装系统的尴尬。本文从系统外壳、窗口
WIN11上硬刚CCS3.3:一个DSP初学者的踩坑实录与避坑指南
本文详细记录了在Windows 11系统上安装和配置Code Composer Studio 3.3(CCS3.3)的全过程,包括系统兼容性检查、安装优化、性能调优、编译错误解决等关键步骤。特别针对DSP初学者提供了实用的避坑指南和调试技巧,帮助用户在WIN11环境下顺利运行CCS3.3进行DSP开发。
Windows Vista升级Win7的五大兼容性阻断点解析
操作系统升级兼容性是IT运维中的基础性技术命题,其核心在于硬件抽象层(HAL)、驱动签名机制、服务依赖关系、用户配置迁移及固件级交互等多层协同。Windows 7作为Vista之后的关键演进版本,首次系统性强化了驱动强制签名校验与ACPI电源管理规范,使原地升级从流程操作升维为跨代际系统兼容性压力测试。这一过程暴露出的HAL不匹配、ACPI握手失败等问题,至今仍在Win10→Win11等后续升级中复现。本文聚焦真实企业环境下的高频硬性阻断点,结合BIOS调优、驱动注入、注册表修复等工程实践,为老旧设备利旧、
Win10重装系统底层原理与实战排障指南
Windows重装系统本质上是UEFI固件、GPT分区、NTFS文件系统与驱动生态协同工作的底层工程。理解启动链(从电源键到EFI加载)、区分MBR/GPT磁盘布局、掌握PE环境构建(如微PE官网工具)及BIOS/UEFI设置(戴尔BIOS设置U盘启动、Secure Boot开关)是成功重装的前提。技术价值在于规避‘一键重装’陷阱,实现故障归因与可复用处置——例如解决‘重装后3.5mm无声音输出’需匹配Realtek芯片ID驱动,而非反复重装;应对‘无法安装Windows因为磁盘布局不受UEFI’须校验并转
Windows XP Mode深度解析:Win7时代的无缝兼容技术
虚拟机是基础抽象层,而运行时兼容环境(Runtime Compatibility Environment)才是解决遗留系统迁移难题的核心范式。其原理在于通过增强会话协议、双向设备重定向与应用级集成三重机制,在宿主系统中实现 guest 应用的原生级交互体验。这类技术不仅承载着兼容性保障的关键价值,更深刻影响了现代操作系统如WSL、Android子系统等的设计逻辑。典型应用场景包括VB6/Access架构的老财务软件、工业控制驱动、医疗影像设备接口等无法重构的legacy application。本文聚焦Wi
PVZTools内存调试原理与Win11兼容实践
内存调试是单机游戏辅助工具的核心技术基础,涉及进程通信、动态地址定位与输入事件模拟三大关键环节。其原理依赖Windows用户态API(如OpenProcess、mouse_event)实现跨进程读写与操作注入,技术价值在于不修改文件、不触发反作弊、全程可验证。典型应用场景包括老旧游戏兼容适配、运行时变量监控及自动化交互开发。本文聚焦植物大战僵尸(PVZ)原版在Win11下的稳定运行问题,深入解析ASLR应对、DPI坐标校准与多级指针扫描机制,结合PVZTools这一轻量级内存调试工具实例,系统呈现从地址发现
Windows 11/10 资源管理器卡死别慌!这3种重启explorer.exe的方法亲测有效
本文详细介绍了Windows 11/10资源管理器卡死时的3种专业级恢复方案,包括通过任务管理器、命令行和系统内置快捷键重启explorer.exe进程。这些方法适用于不同严重程度的故障场景,帮助用户快速恢复系统功能,提升工作效率。
3904



被折叠的 条评论
为什么被折叠?



