读书人

为什么SetTextColor没有用阿?解决方法

发布时间: 2012-02-14 19:19:19 作者: rapoo

为什么SetTextColor没有用阿?
我想给按钮字体改变颜色,想用SetWindowLong自定义窗口过程以处理WM_DRAWITEM消息,从而用SetTextColor改变颜色,冗长的API和常量声明就不写了,以下代码是主要的代码:
标准模块里:
Global prevProc As Long
Global gHW As Long
Global gHcmd As Long
Global CtrlID As Long

Public Sub hook()
prevProc = SetWindowLong _
(gHW, GWL_WNDPROC, AddressOf DrawButtonProc)
End Sub
Private Function DrawButtonProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim di As DRAWITEMSTRUCT
If wMsg = WM_DRAWITEM Then
CopyMemory di, ByVal lParam, Len(di) '要得到的结构体
If CtrlID = di.CtlID And ODT_BUTTON = di.CtlType Then

SetTextColor di.hdc, RGB(0, 0, 255)

End If
End If
DrawButtonProc = CallWindowProc(prevProc, gHW, wMsg, wParam, lParam)
End Function

窗体模块里面
Private Sub Form_Activate()
hook
End Sub

Private Sub Form_Load()
gHW = Me.hWnd
gHcmd = Command1.hWnd
CtrlID = GetDlgCtrlID(gHcmd)
Call SendMessage(Command1.hWnd, BM_SETSTYLE, BS_OWNERDRAW, False)
End Sub
求各位大侠指导,不胜感激

[解决办法]
http://blog.csdn.net/hhfh/archive/2006/11/29/1419163.aspx

是不没有把sytle设置成graphic
[解决办法]
another link:
http://vbnet.mvps.org/index.html?code/intrinsic/buttoncolorcheck.htm
[解决办法]
http://www.china-askpro.com/msg31/qa50.shtml
[解决办法]
高兴地得知你解决了问题。我所看到的例子都是在处理WM_DRAWITEM之前先调用CallWindowProc(lOldProc, hWnd, wMsg, wParam, lParam)。
另外,可能CommandButton不会接受XP Theme Style了。

读书人网 >VB

热点推荐