打开文件对话框缺省为缩略图方式显示
来源:互联网 发布:校园机房网络拓扑图 编辑:程序博客网 时间:2024/06/02 03:56
最新情况: 参见 打开公用对话框的初始视图类型问题
------------------------------------------------------
坛子上有人问到如何对使用 CommonDialog 组件显示的打开对话框缺省显示为缩略图的问题,其实上一次提出这个问题的时候我就已经回答过,可能楼主对 api 不熟悉,所以没有写出实现的代码。这次豆三版主挑出了我的马甲,只好勉为其难了。
查过 msdn 后,找到一个函数 GetOpenFileNameEx,可以指定打开对话框时的视图样式,可惜其中只描述了在 WindowsMobile 5.0/WinCE 中的导出库,Windows2k/xp/2k3 中在哪里却没有指出。试过 comdlg32 / commctrl / shell32 都没有找到,网上找了一圈也没结果,看来是专用于 WindowsMobile 5.0 的了,只好放弃。
一定要实现的话就只能模拟鼠标和键盘按键来实现了。下面就是实现这个功能的代码,由于是模拟手工操作,所以弹出菜单一定会闪现一下,虽不是很好,但也暂无好的解决方法。下面是实现此功能的简单示例,真正要用于你的程序还需要做些错误处理方面的改进:
- #define WM_TIMER 0x0113
- #define TIMER_ID 100
- #define MOUSEEVENTF_MOVE 0x0001
- #define MOUSEEVENTF_RIGHTDOWN 0x0008
- #define MOUSEEVENTF_RIGHTUP 0x0010
- #define MOUSEEVENTF_ABSOLUTE 0x8000
- #define KEYEVENTF_KEYDOWN 0x0000
- #define KEYEVENTF_KEYUP 0x0002
- PUBLIC oForm
- oForm = NEWOBJECT( 'MyForm' )
- oForm.Show()
- READ EVENTS
- DEFINE CLASS MyForm AS form
- Height = 78
- Width = 293
- DoCreate = .T.
- AutoCenter = .T.
- Caption = "Form1"
- AllowOutput = .F.
- Name = "Form1"
- ADD OBJECT command1 AS commandbutton WITH ;
- Top = 24, ;
- Left = 180, ;
- Height = 27, ;
- Width = 84, ;
- Caption = "打开图片", ;
- Name = "command1"
- PROCEDURE ToggleViewStyle
- LPARAMETERS p1, p2, p3, p4
- LOCAL hWndLvw
- m.hWndLvw = This.FindListViewWindow()
- IF ( 0 != m.hWndLvw )
- KillTimer( This.hWnd, TIMER_ID )
- This.MoveMouseToListView( m.hWndLvw )
- mouse_event( MOUSEEVENTF_RIGHTDOWN ,0 ,0 ,0 ,0 )
- mouse_event( MOUSEEVENTF_RIGHTUP ,0 ,0 ,0 ,0 )
- keybd_event( ASC('V') ,0 ,KEYEVENTF_KEYDOWN ,0 )
- keybd_event( ASC('V') ,0 ,KEYEVENTF_KEYUP ,0 )
- keybd_event( ASC('H') ,0 ,KEYEVENTF_KEYDOWN ,0 )
- keybd_event( ASC('H') ,0 ,KEYEVENTF_KEYUP ,0 )
- ENDIF
- ENDPROC
- PROCEDURE FindListViewWindow
- LOCAL hWndDlg, hWndLvw0, hWndLvw1
- m.hWndLvw1 = 0
- m.hWndDlg = FindWindow( '#32770', This.dlg.DialogTitle )
- IF ( 0 != m.hWndDlg )
- m.hWndLvw0 = FindWindowEx( m.hWndDlg, 0, 'SHELLDLL_DefView', NULL )
- IF ( 0 != m.hWndLvw0 )
- m.hWndLvw1 = FindWindowEx( m.hWndLvw0, 0, 'SysListView32', NULL )
- ENDIF
- ENDIF
- RETURN m.hWndLvw1
- ENDPROC
- PROCEDURE api_decl
- DECLARE Long SetTimer IN WIN32API ;
- Long hWnd, Long nIDEvent, Long uElapse, Long lpTimerFunc
- DECLARE Long KillTimer IN WIN32API ;
- Long hWnd, Long uIDEvent
- DECLARE Long FindWindow IN WIN32API ;
- String lpClassName, String lpWindowName
- DECLARE Long FindWindowEx IN WIN32API ;
- Long hwndParent, Long hwndChildAfter, String lpszClass, String lpszWindow
- DECLARE Long mouse_event IN WIN32API ;
- Long dwFlags, Long dx, Long dy, Long dwData, Long dwExtraInfo
- DECLARE Long keybd_event IN WIN32API ;
- Long bVk, Long bScan, Long dwFlags, Long dwExtraInfo
- DECLARE Long GetCursorPos IN WIN32API ;
- String @ lpPoint
- DECLARE Long GetWindowRect IN WIN32API ;
- Long hWnd, String @ lpRect
- ENDPROC
- PROCEDURE MoveMouseToListView
- LPARAMETERS thLvw
- LOCAL cPoint, cRect, x0, x1, x2, y0, y1, y2
- m.cPoint = REPLICATE( CHR(0), 8 )
- m.cRect = REPLICATE( CHR(0), 16 )
- GetCursorPos( @ m.cPoint )
- GetWindowRect( m.thLvw, @ m.cRect )
- m.x0 = CTOBIN( SUBSTR( m.cPoint, 1, 4 ), 'rs' )
- m.y0 = CTOBIN( SUBSTR( m.cPoint, 5, 4 ), 'rs' )
- m.x1 = CTOBIN( SUBSTR( m.cRect, 1, 4 ), 'rs' )
- m.y1 = CTOBIN( SUBSTR( m.cRect, 5, 4 ), 'rs' )
- m.x2 = CTOBIN( SUBSTR( m.cRect, 9, 4 ), 'rs' )
- m.y2 = CTOBIN( SUBSTR( m.cRect, 13, 4 ), 'rs' )
- IF !BETWEEN( m.x0, m.x1, m.x2 ) OR !BETWEEN( m.y0, m.y1, m.y2 )
- mouse_event( ;
- BITOR( MOUSEEVENTF_MOVE, MOUSEEVENTF_ABSOLUTE ), ;
- (m.x2-20)*0xffff/SYSMETRIC(1), (m.y2-20)*0xffff/SYSMETRIC(2), 0, 0 )
- ENDIF
- ENDPROC
- PROCEDURE GetPictureFile
- This.api_decl()
- BINDEVENT( This.hWnd, WM_TIMER, This, 'ToggleViewStyle' )
- SetTimer( This.hWnd, TIMER_ID, 50, 0 )
- This.dlg.FileName = ''
- This.dlg.ShowOpen()
- UNBINDEVENT( This.hWnd, WM_TIMER )
- RETURN This.dlg.FileName
- ENDPROC
- PROCEDURE Init
- This.NewObject( 'dlg', 'olecontrol',,, 'MSComDlg.CommonDialog' )
- This.dlg.DialogTitle = '请选择要打开的图片文件'
- ENDPROC
- PROCEDURE Unload
- CLEAR EVENTS
- ENDPROC
- PROCEDURE command1.Click
- MESSAGEBOX( Thisform.GetPictureFile() )
- ENDPROC
- ENDDEFINE
- 打开文件对话框缺省为缩略图方式显示
- 文件对话框的打开方式
- QListWidget方式显示缩略图
- QListWidget方式显示缩略图
- Windows中还原文件打开方式为未知打开方式
- 文件上传显示缩略图
- 文件上传显示缩略图
- 以二进制方式打开文件并显示
- 将文件恢复为未知打开方式
- 还原文件打开方式为未知应用程序
- |打开对话框最大化显示|
- 缩略图显示方式也就是分栏显示方式
- 如何在代码中调用“文件打开方式对话框”?
- 使用Windows API函数显示打开文件对话框
- VC++6.0中显示打开文件路径对话框
- 为“打开文件对话框”增加“预览”功能实例
- 按比例生成缩略图文件及显示缩略图
- 按比例生成缩略图文件及显示缩略图
- SQL SERVER性能优化综述
- POI 操纵EXCEL 写入内存,下载
- python整理一——解释器上的几个简单操作
- web.config数据库链接字符窜
- SQL利用Case When Then多条件判断
- 打开文件对话框缺省为缩略图方式显示
- 二进制格雷码与自然二进制码的互换(转载)
- 解决一个看不到options的错误
- vc6.0编写程序时类成员无法显示
- SAP考试重新整合表
- 蟒营闭营总结
- 到底是干什么的
- 在DWR中慎用Java的属性覆盖
- 进一步的SAP学习计划