狂送200分:关于vb里资源文件.res的用法。高手快抢!

NiceFeather 2000-08-16 11:46:00
vb里的资源文件.res(可在vc里得到)若为dialog,dialog里又有许多控件,每个控件均有不同的数字资源ID,如何在VB里引用这些控件,或得到这些控件的hWnd而接受和发送消息,有例子者重赏!
...全文
693 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
NiceFeather 2000-09-10
  • 打赏
  • 举报
回复
to Shines:rosement的答案是用了一个封装了MS CommDialog控件功能的DLL完成的,dll必须在使用前实例化,完成了res里的Dialog里的控件的WM_INITDIALOG的工作,以及这些控件的消息捕获工作,并未把这些工作和CommFileDialog的选中的文件等内部功能变化同步起来,而且没有SendDlgItemMessage()给Dialog的子控件发消息,解决了对Dialog的标准控件的消息捕获,它确实已解答了我上述的问题,但未完成你我的问题。这些你都知道了,鉴于文件包比较大,我就不把答案给你了!
shines77 2000-09-03
  • 打赏
  • 举报
回复
NiceFeather, 我和Gampin也在研究,建Hook并获得选中文件在文件名等是不难的,现在就是不知道怎么 用SendDlgItemMessage()给Dialog的子控件发消息了(设置图片), rosement什么答案,给我一份!
rosement 2000-09-01
  • 打赏
  • 举报
回复
我已经邮寄了一份答案给你!
NiceFeather 2000-08-31
  • 打赏
  • 举报
回复
首先多谢rosement,你的样例给了我很大的启发,确实起到了抛砖引玉的作用,但你的例子只是在WM_INITDIALOG事件中对CommonFileDialog进行对标准FileDialog进行初始化,当然也可以对自己的模板Dialog进行这项工作,但光初始化是不够的,因我的模板资源在CommonFileDialog初始化完成后要接收用户的各种鼠标消息,如转换文件夹、激活和失去文件焦点等动作,这样我得为每种可能的用户消息编代码,现在就是不知这些常用消息有哪些,请再指教!所以说你指的:“如果你想加入自己的控制,我想这里(WM_INITDIALOG)是最好的地方”并不完全准确!
如果把解决这个问题看作一部电影的话,你的回答无疑是精彩的开场部分,还未涉及问题的根本,欢迎你再回来指教!
至于你提到的关于这个问题参考《VISUAL C++的技术内幕》,我手上有多本《VISUAL C++ xxx技术内幕》,里面均有这方面的章节,但都讲得比较简单,都是采用重载CFileDialog这个类并挂于模板而实现,因CFileDialog本身封装了相关Windows消息,所以在VISUAL C++里解决此类问题并不难,但在VB里要解决这个问题就完全靠探测标准FileDialog的各种消息来对自己的模板控件发送相应消息,作起来就比较难!
liuwc我也多谢,你的回答也比较全面,无疑是对上面OUYAN兄的深入补充,但我似乎只对最后的“关于如何使用资源文件开发多区域应用程序的示例,请参阅本章后面的“自动取款机应用程序示例”。 关于使用资源文件编程的背景资料,请参阅“再论编程”中的“利用资源文件进行工作”。”感兴趣,但可惜的是你的回答嘎然而止,也欢迎你回来继续讨论!
我觉得这个问题如果能顺利解决的话,应该列为本论坛VB问题的精华部分!欢迎诸位VC、VB大虾继续来为这个问题添砖加瓦!
0xFFCD 2000-08-29
  • 打赏
  • 举报
回复
资源编辑器外接程序


资源编辑器外接程序增加了在 Visual Basic 集成开发环境中使用资源文件 (.res) 的能力。资源文件是由资源编辑器自动编译的,因此就不再需要一个单独的资源编辑器或是.rc 文件了。

可以使用资源编辑器来:

向工程添加一个资源文件 (.res)。


向一个资源文件添加新的字符串表、游标、位图、图标或自定义资源。


在一个资源文件中编辑资源的属性。


从一个资源文件中删除资源。
详细信息 要想了解有关资源文件以及在一个工程中如何使用它们的详细信息,请参阅《Visual Basic 程序员指南》中的“使用资源文件”。
0xFFCD 2000-08-29
  • 打赏
  • 举报
回复
使用本地化资源文件


Visual Basic 通过使用资源文件有效地把本地化信息从代码中分离出来。

注意 工程中只能有一个资源文件,如果试图添加一个以上的资源文件 Visual Basic 将产生一个错误信息。

把字符串保存在资源文件中的优点
编写代码时,可以调用 LoadResString、LoadResPicture 和 LoadResData 函数代替对文字、图象和数据的引用。把这些元素存储在资源文件中有两大好处:

提高性能和增加空间,这是因为字符串、位图、图标和数据可以不必在调用窗体或模块时就全部加载,而可以按需要从资源文件中加载。


把需要翻译的资源单独放在一个资源文件中,因此没有必要访问源代码或重新编译应用程序。
要创建资源文件,请按照以下步骤执行:

从“工程”菜单中选择“新资源文件”。
注意 该命令只有在资源编辑器外接程序加载的情况下才能使用。要加载资源管理器外接程序,请选择“外接程序”菜单中的“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”。

在“打开一个资源文件”对话框中,为资源文件输入一个名称。资源文件名称将被添加到“工程资源管理器”的“相关文档”节点。
Visual Basic 把具有 .res 扩展名的文件识别为资源文件。如果资源文件不具有正确的扩展名,Visual Basic 将不会加载它。相反地,任何具有 .res 扩展名的文件被加入到工程时都会被 Visual Basic 当作资源文件处理,如果该文件不具有标准的资源文件格式,Visual Basic 将在第一次使用资源文件支持函数(LoadResString、LoadResPicture 和 LoadResData)或试图编译成 .exe 文件时产生错误信息。试图添加 16 位的资源文件到工程中也会产生同样的错误信息。

资源文件被添加到工程后,.res 文件将出现在“工程”窗口中。与窗体或模块不同,在 Visual Basic 中不能查看 .res 文件。该文件是标准的资源文件,可由 Microsoft Visual C++ 和其它大部分的 Windows 开发工具创建或使用。一旦在“文件”菜单中选中“生成 projectname.exe”一项,Visual Basic 将把该文件中的所有资源编译到 .exe 文件中作为 Windows 的资源。

在编译 .exe 文件之前和之后,.res 文件都是标准的 Windows 资源文件,这意味着任何标准的 Windows 资源编辑器都可以加载该文件。

要编辑资源文件,请按照以下步骤执行:

从“工具”菜单中选择“资源编辑器”。
注意 该命令仅在资源编辑器外接程序加载的情况下才能使用。要加载资源编辑器外接程序,请从“外接程序”菜单中选择“外接程序管理器”。在“外接程序管理器”对话框中,选择“VB6 资源编辑器”并复选“加载/卸载”框。

从“资源编辑器工具栏”中选择一个按钮来编辑一个现存资源文件或添加一个新的。有关编辑资源文件的更详细信息,请参阅资源编辑器外接程序文档。
锁定资源文件
Visual Basic 可以对 .res 文件进行文件锁定,以防止同时有几个应用程序使用该文件。在下列条件下 .res 文件将被锁定:

Visual Basic 处于运行模式或中断模式。


创建了一个 .exe 文件。
详细信息 关于如何使用资源文件开发多区域应用程序的示例,请参阅本章后面的“自动取款机应用程序示例”。 关于使用资源文件编程的背景资料,请参阅“再论编程”中的“利用资源文件进行工作”。
rosement 2000-08-28
  • 打赏
  • 举报
回复
Option Explicit
Public Const OFN_ALLOWMULTISELECT As Long = &H200
Public Const OFN_CREATEPROMPT As Long = &H2000
Public Const OFN_ENABLEHOOK As Long = &H20
Public Const OFN_ENABLETEMPLATE As Long = &H40
Public Const OFN_ENABLETEMPLATEHANDLE As Long = &H80
Public Const OFN_EXPLORER As Long = &H80000
Public Const OFN_EXTENSIONDIFFERENT As Long = &H400
Public Const OFN_FILEMUSTEXIST As Long = &H1000
Public Const OFN_HIDEREADONLY As Long = &H4
Public Const OFN_LONGNAMES As Long = &H200000
Public Const OFN_NOCHANGEDIR As Long = &H8
Public Const OFN_NODEREFERENCELINKS As Long = &H100000
Public Const OFN_NOLONGNAMES As Long = &H40000
Public Const OFN_NONETWORKBUTTON As Long = &H20000
Public Const OFN_NOREADONLYRETURN As Long = &H8000
Public Const OFN_NOTESTFILECREATE As Long = &H10000
Public Const OFN_NOVALIDATE As Long = &H100
Public Const OFN_OVERWRITEPROMPT As Long = &H2
Public Const OFN_PATHMUSTEXIST As Long = &H800
Public Const OFN_READONLY As Long = &H1
Public Const OFN_SHAREAWARE As Long = &H4000
Public Const OFN_SHAREFALLTHROUGH As Long = 2
Public Const OFN_SHAREWARN As Long = 0
Public Const OFN_SHARENOWARN As Long = 1
Public Const OFN_SHOWHELP As Long = &H10
Public Const OFS_MAXPATHNAME As Long = 260

'OFS_FILE_OPEN_FLAGS and OFS_FILE_SAVE_FLAGS below
'are mine to save long statements; they're not
'a standard Win32 type.
Public Const OFS_FILE_OPEN_FLAGS = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_CREATEPROMPT _
Or OFN_NODEREFERENCELINKS

Public Const OFS_FILE_SAVE_FLAGS = OFN_EXPLORER _
Or OFN_LONGNAMES _
Or OFN_OVERWRITEPROMPT _
Or OFN_HIDEREADONLY

Public Type OPENFILENAME
nStructSize As Long
hWndOwner As Long
hInstance As Long
sFilter As String
sCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
sFile As String
nMaxFile As Long
sFileTitle As String
nMaxTitle As Long
sInitialDir As String
sDialogTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
sDefFileExt As String
nCustData As Long
fnHook As Long
sTemplateName As String
End Type

Public OFN As OPENFILENAME

Public Declare Function GetOpenFileName Lib "comdlg32.dll" _
Alias "GetOpenFileNameA" _
(pOpenfilename As OPENFILENAME) As Long

Public Declare Function GetSaveFileName Lib "comdlg32.dll" _
Alias "GetSaveFileNameA" _
(pOpenfilename As OPENFILENAME) As Long

Public Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long

'new additions to original code
'supporting the Hook method
Public Const WM_INITDIALOG = &H110
Private Const SW_SHOWNORMAL = 1

Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Declare Function GetParent Lib "user32" _
(ByVal hwnd As Long) As Long

Public Declare Function SetWindowText Lib "user32" _
Alias "SetWindowTextA" _
(ByVal hwnd As Long, _
ByVal lpString As String) As Long

Public Declare Function MoveWindow Lib "user32" _
(ByVal hwnd As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal bRepaint As Long) As Long

Public Declare Function GetWindowRect Lib "user32" _
(ByVal hwnd As Long, _
lpRect As RECT) As Long

Public Function FARPROC(pfn As Long) As Long

'Dummy procedure that receives and returns
'the return value of the AddressOf operator.

'Obtain and set the address of the callback
'This workaround is needed as you can't assign
'AddressOf directly to a member of a user-
'defined type, but you can assign it to another
'long and use that (as returned here)

FARPROC = pfn

End Function


Public Function OFNHookProc(ByVal hwnd As Long, _
ByVal uMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

'On initialization, set aspects of the
'dialog that are not obtainable through
'manipulating the OPENFILENAME structure members.

Dim hwndParent As Long
Dim rc As RECT

'temporary vars for demo
Dim newLeft As Long
Dim newTop As Long
Dim dlgWidth As Long
Dim dlgHeight As Long
Dim scrWidth As Long
Dim scrHeight As Long

Select Case uMsg
Case WM_INITDIALOG

'obtain the handle to the parent dialog
hwndParent = GetParent(hwnd)

If hwndParent <> 0 Then

'Just to prove the handle was obtained,
'change the dialog's caption.
Call SetWindowText(hwndParent, "I'm Hooked on Hooked Dialogs!")

'Position the dialog in the centre of
'the screen. First get the current dialog size.
Call GetWindowRect(hwndParent, rc)

'(To show the calculations involved, I've
'used variables instead of creating a
'one-line MoveWindow call.)
dlgWidth = rc.Right - rc.Left
dlgHeight = rc.Bottom - rc.Top

scrWidth = Screen.Width \ Screen.TwipsPerPixelX
scrHeight = Screen.Height \ Screen.TwipsPerPixelY

newLeft = (scrWidth - dlgWidth) \ 2
newTop = (scrHeight - dlgHeight) \ 2

'..and set the new dialog position.
Call MoveWindow(hwndParent, newLeft, newTop, dlgWidth, dlgHeight, True)

OFNHookProc = 1

End If

Case Else:

End Select

End Function

'--end block--'

Option Explicit

Private Sub Form_Load()

Command1.Caption = "Get File Open"
Command2.Caption = "Get File Save"

End Sub


Private Function StripDelimitedItem(startStrg As String, _
delimiter As String) As String

'take a string separated by nulls,
'split off 1 item, and shorten the string
'so the next item is ready for removal.
Dim pos As Long

pos = InStr(1, startStrg, delimiter)

If pos Then

StripDelimitedItem = Mid$(startStrg, 1, pos)
startStrg = Mid$(startStrg, pos + 1, Len(startStrg))

End If

End Function


Private Function TrimNull(item As String) As String

Dim pos As Integer

pos = InStr(item, Chr$(0))
If pos Then
TrimNull = Left$(item, pos - 1)
Else: TrimNull = item
End If

End Function


Private Sub Command1_Click()

Dim sFilters As String
Dim pos As Long
Dim buff As String
Dim sLongname As String
Dim sShortname As String

'filters for the dialog
sFilters = "Visual Basic Forms" & vbNullChar & "*.frm" & vbNullChar & _
"Visual Basic Modules" & vbNullChar & "*.bas" & vbNullChar & _
"Visual Basic Projects" & vbNullChar & "*.vbp" & vbNullChar & _
"Text Files" & vbNullChar & "*.txt" & vbNullChar & _
"All Files" & vbNullChar & "*.*" & vbNullChar & vbNullChar

'populate the structure
With OFN

.nStructSize = Len(OFN)
.hWndOwner = Form1.hwnd
.sFilter = sFilters
.nFilterIndex = 2
.sFile = "Untitled.bas" & Space$(1024) & vbNullChar & vbNullChar
.nMaxFile = Len(.sFile)
.sDefFileExt = "bas" & vbNullChar & vbNullChar
.sFileTitle = vbNullChar & Space$(512) & vbNullChar & vbNullChar
.nMaxTitle = Len(OFN.sFileTitle)
.sInitialDir = "d:\vb5" & vbNullChar & vbNullChar
.sDialogTitle = "VBnet GetOpenFileName Demo"
.flags = OFS_FILE_OPEN_FLAGS Or _
OFN_ALLOWMULTISELECT Or _
OFN_EXPLORER Or _
OFN_ENABLEHOOK
.fnHook = FARPROC(AddressOf OFNHookProc)

End With

'call the API
If GetOpenFileName(OFN) Then

buff = Trim$(Left$(OFN.sFile, Len(OFN.sFile) - 2))
Do While Len(buff) > 3
List1.AddItem StripDelimitedItem(buff, vbNullChar)
Loop
Text1 = OFN.sFile
Text2 = Left$(OFN.sFile, OFN.nFileOffset)
Text3 = Mid$(OFN.sFile, OFN.nFileOffset + 1, Len(OFN.sFile) - OFN.nFileOffset - 1)
Text4 = Mid$(OFN.sFile, OFN.nFileExtension + 1, Len(OFN.sFile) - OFN.nFileExtension)
Text5 = OFN.sFileTitle

sLongname = OFN.sFileTitle
sShortname = Space$(128)
pos = GetShortPathName(sLongname, sShortname, Len(sShortname))
Text6 = LCase$(Left$(sShortname, pos))

sLongname = OFN.sFile
sShortname = Space$(128)
pos = GetShortPathName(sLongname, sShortname, Len(sShortname))
Text7 = LCase$(Left$(sShortname, pos))

Check1.Value = Abs((OFN.flags And OFN_READONLY))

End If

End Sub

Private Sub Command2_Click()

Dim sFilters As String
Dim pos As Long
Dim buff As String
Dim sLongname As String
Dim sShortname As String

'filters for the dialog
sFilters = "Visual Basic Forms" & vbNullChar & "*.frm" & vbNullChar & _
"Visual Basic Modules" & vbNullChar & "*.bas" & vbNullChar & _
"Visual Basic Projects" & vbNullChar & "*.vbp" & vbNullChar & _
"Text Files" & vbNullChar & "*.txt" & vbNullChar & _
"All Files" & vbNullChar & "*.*" & vbNullChar & vbNullChar

With OFN

.nStructSize = Len(OFN)
.hWndOwner = Form1.hwnd
.sFilter = sFilters
.nFilterIndex = 2
.sFile = "Untitled.bas" & Space$(1024) & vbNullChar & vbNullChar
.nMaxFile = Len(.sFile)
.sDefFileExt = "bas" & vbNullChar & vbNullChar
.sFileTitle = vbNullChar & Space$(512) & vbNullChar & vbNullChar
.nMaxTitle = Len(OFN.sFileTitle)
.sInitialDir = "d:\vb5" & vbNullChar & vbNullChar
.sDialogTitle = "VBnet GetSaveFileName Demo"
.flags = OFS_FILE_SAVE_FLAGS Or _
OFN_ENABLEHOOK
.fnHook = FARPROC(AddressOf OFNHookProc)

End With


'call the API
If GetSaveFileName(OFN) Then

buff = Trim$(Left$(OFN.sFile, Len(OFN.sFile) - 2))

Do While Len(buff) > 3
List1.AddItem StripDelimitedItem(buff, vbNullChar)
Loop

Text1 = OFN.sFile
Text2 = Left$(OFN.sFile, OFN.nFileOffset)
Text3 = Mid$(OFN.sFile, OFN.nFileOffset + 1, Len(OFN.sFile) - OFN.nFileOffset - 1)
Text4 = Mid$(OFN.sFile, OFN.nFileExtension + 1, Len(OFN.sFile) - OFN.nFileExtension)
Text5 = OFN.sFileTitle

sLongname = OFN.sFileTitle
sShortname = Space$(128)
pos = GetShortPathName(sLongname, sShortname, Len(sShortname))
Text6 = LCase$(Left$(sShortname, pos))

sLongname = OFN.sFile
sShortname = Space$(128)
pos = GetShortPathName(sLongname, sShortname, Len(sShortname))
Text7 = LCase$(Left$(sShortname, pos))

Check1.Value = Abs((OFN.flags And OFN_READONLY))

End If

End Sub
'--end block--'

以上的代码是对COMMONDIALOG的HOOK代码,即显示COMMONDIALOG时始终将其定位在中间位置!其中加入了在对话框生成的时候加入自己的控制,如果你想假如自己的控制,我想这里是最好的地方。
另外对于你提到的这个技术,可以参考《VISUAL C++的技术内幕》看看,它是怎么完成这个任务的,对于VB中该如何利用,就要看你自己的,留给你这个作业吧。

NiceFeather 2000-08-28
  • 打赏
  • 举报
回复
挑战国内VB、VC高手,谁能写一个简单的WinHookProc例子,实现这个Dialog模板里任一Windows控件的控制,我将送他满分!你不回答这个问题你就不是高手!
NiceFeather 2000-08-20
  • 打赏
  • 举报
回复
OUYAN兄:
首先多谢你!你的回答很全面,但你提的这些我已知道了,请仔细阅读我的问题及上面补提的问题,我的.res里有一个Dialog模板,Dialog模板里有许多控件,这个Dialog模板将放在CommonFileDialog里作为childwindow,为了实现这些控件的功能,我必须在WinHookProc里探测各种控件的各种Windows消息,请问这个WinHookProc怎样写?欢迎你再来讨论!
谁能写一个简单的WinHookProc例子,实现这个Dialog模板里任一Windows控件的控制,我将送他满分!
OUYAN 2000-08-20
  • 打赏
  • 举报
回复
一.VB中资源文件的分类

---- 通常将资源分为两类:1.字符串资源,包括菜单和文本中使用的字符串,如"Hello World"等;2.二进制资源,如位图(.BMP),图标(.ICO),光标(.CUR),声音(.WAV)和动画(.AVI)等。对于不同的资源,要用不同的调入函数,这在下面会介绍。

---- 二.资源文件的建立

---- 采用如下步骤来建立资源文件:

---- 1.启动VB6.0企业版,新建一个标准 Exe 工程,即工程1,有一个缺省窗体,form1。如果采用应用程序向导建立工程,那么在向导中会提示是否建立资源文件,这也是建立资源文件的一个方法。

---- 2.在[外接程序]菜单下,点击[外接程序管理器],弹出外接程序管理器窗口,窗口左边的列表中列出了所有的外接程序,鼠标双击"VB6资源编辑器"。然后按[确定]按钮返回主窗口。

---- 3.此时系统弹出资源编辑器窗口,同时在主窗口的工具条上添加了快捷按钮。而在弹出的资源编辑器窗口顶部,也有一些快捷按钮中,其中靠右边有五个按钮,分别对应添加字符串,光标,图标, 位图,自定义资源等命令。

---- 4.添加字符串。鼠标点击添加字符串快捷按钮,弹出编辑字符串窗口,系统自动给出字符串资源的标识号,用户可在此依次输入、编辑、修改、删除对应不同菜单,按钮,消息提示的字符串。对不同类型的字符串,用户最好设定特定的标识号规则。在本例中,建立的字符串资源如下:

标识号 中文名称 标识号 中文名称
101 文件[F] 202 确定[Y]
102 打开[O] 303 我的演示程序
103 退出[X]

---- 5.依次建立光标、图标,位图等其他资源,注意对于WAV、AVI等特殊资源,需要采用年[添加自定义资源]方法建立。最后在窗口上树形视图(TreeView)中,分类列出了各项资源。在本例中,各添加了一个位图文、图标文件、光标文件,分别是MyBmp.BMP,MyIcon.ICO,MyCur.CUR。
---- 6.保存资源文件,缺省为工程1.res。

---- 三.在应用程序中使用资源文件

---- 在form1上添加如下控件:

---- 1.按钮:Name=cmdButton1

---- 2.图标控件:Name=img1

---- 3.图形控件:Name=Pic1

---- 在Form1上添加三个菜单,分别为

菜单名 对应标识号(菜单的caption)
1.mnuFile 101
2.mnuOpen 102
3.mnuexit 103
并添加如下代码:
sub form1_load()
'将字符串调入控件属性
mnufile.Caption = LoadResString(101)
mnuopen.Caption = LoadResString(102)
mnuexit.Caption = LoadResString(103)
Cmdbutton1.Caption = LoadResString(202)
Me.Caption = LoadResString(303)
End sub
Sub cmdbutton_Click()
'将图形,图标,鼠标调入相应的控件
Pic1.Picture = LoadResPicture(101, vbResBitmap)
img1.Picture = LoadResPicture(101, vbResIcon)
Me.MousePointer = 99
Me.MouseIcon = LoadResPicture(101, vbResCursor)
End sub

---- 运行,系统编译资源文件,显示的菜单条如资源文件中的字符串所示,然后单击按钮cmdbutton1,调入位图,图标,并改变鼠标形状。
---- 四.函数常量说明

---- 上例中用到的函数LoadResString,LoadResPicture是VB中Global 对象下的方法函数。

---- 用法如下:

---- 1.LoadResString(index):index是必需的一个整数,它用来指定资源文件中数据的标识符 (ID) 。返回一个文本字符串。

---- 2.LoadResPicture(index, format):index必需的。它是一个整数或字符串,它用来指定资源文件中数据的标识符 (ID) ,format是必需的一个数值或常数,指定返回数据的格式。 返回一个 Picture 对象,例如位图、图标或光标。

---- 常量vbResBitmap ,vbResString, vbResIcon是系统常量,可在VB环境下的对象浏览器中找到其定义。

更详细的介绍可参阅MSDN资料。
NiceFeather 2000-08-20
  • 打赏
  • 举报
回复
我提的问题总是数天无人搭理,各位大虾是嫌分数太低,还是觉得此问题不屑一顾?
NiceFeather 2000-08-19
  • 打赏
  • 举报
回复
请全国VB、VC高手火速前来赐教!甚甚急!!!
NiceFeather 2000-08-18
  • 打赏
  • 举报
回复
请全国VB、VC高手火速前来赐教!甚急!!!
NiceFeather 2000-08-18
  • 打赏
  • 举报
回复
假如说此Dialog是系统公共资源(如:CommonFileDialog)的childwindow,接收和发送消息将全在hook的WinHookProc中,那么怎样在此WinHookProc中捕捉鼠标的各种消息?Windows常用控件(因这里Dialog在.res中,所以非VB6常用控件)消息有哪些?谁能写一简单的例子供我参考?我将送他满分!
Firing_Sky 2000-08-17
  • 打赏
  • 举报
回复
VB6:外接程序管理器……VB资源编辑器……打开资源……
一切OK   ^_^
Areslee 2000-08-17
  • 打赏
  • 举报
回复
用API函数FindWindow()可以找到Dialog的句柄,然后就可以用SendDlgItemMessage()给Dialog的子控件发消息了

1,066

社区成员

发帖
与我相关
我的任务
社区描述
VB 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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