Function WndProc_DialogIBH(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim dRc As RECT, mRc As RECT
Select Case Msg
Case WM_INITDIALOG
GetWindowRect hWnd, dRc
GetClientRect GetParent(hWnd), mRc
MoveWindow hWnd, _
0, 0, _
mRc.Right - mRc.Left, _
dRc.Bottom - dRc.Top, _
True
ShowWindow hWnd, SW_SHOW
Case WM_CTLCOLORSTATIC
Debug.Print wParam, lParam, "Static"
SetBkMode wParam, TRANSPARENT
WndProc_DialogIBH = GetStockObject(NULL_BRUSH)
Case WM_CTLCOLOREDIT
Debug.Print wParam, lParam, "Edit"
Case WM_DESTROY: PostQuitMessage 0
End Select
End Function
我故意把对话框位置覆盖在工具栏上面,来表现Static的透明
可以看到,Edit控件全变黑了!
Function WndProc_DialogIBH(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim dRc As RECT, mRc As RECT Select Case Msg
Case WM_INITDIALOG
GetWindowRect hWnd, dRc
GetClientRect GetParent(hWnd), mRc
MoveWindow hWnd, _
0, 60, _
mRc.Right - mRc.Left, _
dRc.Bottom - dRc.Top, _
True
ShowWindow hWnd, SW_SHOW
SendMessage GetDlgItem(hWnd, ID_IBH_CRUSER), WM_SETTEXT, 0, ByVal "Test"
Case WM_CTLCOLORDLG
SetBkMode wParam, TRANSPARENT
WndProc_DialogIBH = GetStockObject(NULL_BRUSH)
Case WM_CTLCOLORSTATIC
Select Case GetWindowLong(lParam, GWL_ID)
Case ID_IBH_STATIC1, ID_IBH_STATIC2, ID_IBH_STATIC3, ID_IBH_STATIC4, _
ID_IBH_STATIC5, ID_IBH_STATIC6, ID_IBH_SPLIT
SetBkMode wParam, TRANSPARENT
WndProc_DialogIBH = GetStockObject(NULL_BRUSH)
End Select
Case WM_DESTROY: PostQuitMessage 0
End Select
End Function根据上面的代码和图片效果判断,其实Edit控件里面也包含有Static控件,所以在处理WM_CTLCOLORSTATIC消息的时候,也把Edit控件里面的Static也处理了~深层的原因我不了解,反正有我要的效果就行了!!!!!!
Case WM_CTLCOLORDLG
Case WM_CTLCOLORSTATIC消息,而消息内也没有对Static和edit进行分析的问题吧?从你两次代码来看,和你提到的edit属性问题,好像是哦?setbkmode TRANSPARENT 还可以让控件背景透明? 试试去...
我一直用它来输出无背景的字符,难道他还有这功能.....还有这句 WndProc_DialogIBH = GetStockObject(NULL_BRUSH)
是有他用呢? 还是没用到呢?
我上面代码中的那两个不是!至于为什么我处理Static背景的时候,连Edit也处理掉,原因应该是因为Edit控件里面也包含有Static
因为我在回调函数中的WM_CTLCOLORSTATIC消息中,把wParam(控件ID)和lParam(控件句柄)打印出来,发现这个wParam并不是我对话框上已知(就是我自己设置的)的Static的ID,所以我估计这个ID应该是Edit上面的Static的ID至于GetStockObject(NULL_BRUSH)的作用,是一定要的。
传递一个空刷子给对话框,让它不画任何东西在控件背景中如果只要SetBKMode而不要刷子,是没用的。
我是想知道 这个消息是初始化时被调用一次吗?
如果不是 GetStockObject(NULL_BRUSH) 后为什么不 selectobject ?
否则刷子怎么被选如场景?
我是想知道 这个消息是初始化时被调用一次吗?
如果不是 GetStockObject(NULL_BRUSH) 后为什么不 selectobject ?
否则刷子怎么被选如场景?