Public Declare Function ShowWindow Lib "user32" Alias "ShowWindow" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Public Const SW_SHOWMINNOACTIVE = 7 Public Const SW_SHOWNOACTIVATE = 4 Dim Frm as form Set Frm =new Form1 ShowWindow frm.hwnd,SW_SHOWMINNOACTIVE or SW_SHOWNOACTIVATE
输入法窗口,实际是两种窗口: 输入法状态栏是Region, 是由Rgn相关函当选操作出来的。 输入法的文字显示窗口则是windows 窗口类中的IME以下代码演示用VB创建IME窗口module:Option ExplicitPublic Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypeForm1:Option ExplicitPrivate Declare Function CreateWindowEx Lib "user32" _ Alias "CreateWindowExA" (ByVal dwExStyle As Long, _ ByVal lpClassName As String, _ ByVal lpWindowName As String, _ ByVal dwStyle As Long, _ ByVal x As Long, _ ByVal y As Long, _ ByVal nWidth As Long, _ ByVal nHeight As Long, _ ByVal hWndParent As Long, _ ByVal hMenu As Long, _ ByVal hInstance As Long, _ lpParam As Any) As Long Private Const WM_CREATE = &H1Private Const WS_EX_TOPMOST = &H8&Private Const WS_EX_LEFT = &H0Private Const WS_EX_LTRREADING = &H0 Private Const WS_EX_RIGHTSCOLLBAR = &H0Private Const WS_BORDER = &H800000Private Const WS_POPUP = &H80000000 Private Const WS_DISABLED = &H8000000 Private Const WS_CLIPSIBLINGS = &H4000000 Private Const WS_OVERLAPPED = &H0& Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate Const SW_NORMAL = 1 Private Const SW_PARENTOPENING = 3 Private Const SW_SHOW = 5Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function FrameRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal HBRUSH As Long) As LongPrivate Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal HRGN As Long, ByVal HBRUSH As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long Dim HwndNew As LongPrivate Sub Form_Load()
Dim LREC As RECT
Dim Hrect As Long
Dim Hwdc As Long
Dim WCOLOR As Long
Dim HBRUSH As Long
Dim HRGN As Long
HwndNew = CreateWindowEx(WS_EX_TOPMOST, "IME", "New", WS_POPUP Or WS_DISABLED Or WS_CLIPSIBLINGS Or WS_OVERLAPPED, _ 0, 0, 200, 200, Me.hwnd, 0, 0, WM_CREATE) Debug.Print HwndNew
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNOACTIVATE = 4
Dim Frm as form
Set Frm =new Form1
ShowWindow frm.hwnd,SW_SHOWMINNOACTIVE or SW_SHOWNOACTIVATE
[email protected]
用DC一定没有焦点的。因为它仅仅是画出来。我准备去找一个VC的输入法原码,如可能转换后再给你。
或者,你可以看一看关于tooltip中的回复。
输入法状态栏是Region, 是由Rgn相关函当选操作出来的。
输入法的文字显示窗口则是windows 窗口类中的IME以下代码演示用VB创建IME窗口module:Option ExplicitPublic Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypeForm1:Option ExplicitPrivate Declare Function CreateWindowEx Lib "user32" _
Alias "CreateWindowExA" (ByVal dwExStyle As Long, _
ByVal lpClassName As String, _
ByVal lpWindowName As String, _
ByVal dwStyle As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hWndParent As Long, _
ByVal hMenu As Long, _
ByVal hInstance As Long, _
lpParam As Any) As Long
Private Const WM_CREATE = &H1Private Const WS_EX_TOPMOST = &H8&Private Const WS_EX_LEFT = &H0Private Const WS_EX_LTRREADING = &H0
Private Const WS_EX_RIGHTSCOLLBAR = &H0Private Const WS_BORDER = &H800000Private Const WS_POPUP = &H80000000
Private Const WS_DISABLED = &H8000000
Private Const WS_CLIPSIBLINGS = &H4000000
Private Const WS_OVERLAPPED = &H0&
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate Const SW_NORMAL = 1
Private Const SW_PARENTOPENING = 3
Private Const SW_SHOW = 5Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As LongPrivate Declare Function FrameRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal HBRUSH As Long) As LongPrivate Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal HRGN As Long, ByVal HBRUSH As Long) As LongPrivate Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Dim HwndNew As LongPrivate Sub Form_Load()
Dim LREC As RECT
Dim Hrect As Long
Dim Hwdc As Long
Dim WCOLOR As Long
Dim HBRUSH As Long
Dim HRGN As Long
HwndNew = CreateWindowEx(WS_EX_TOPMOST, "IME", "New", WS_POPUP Or WS_DISABLED Or WS_CLIPSIBLINGS Or WS_OVERLAPPED, _
0, 0, 200, 200, Me.hwnd, 0, 0, WM_CREATE)
Debug.Print HwndNew
ShowWindow HwndNew, SW_NORMAL
Hrect = GetClientRect(HwndNew, LREC)
Hwdc = GetDC(HwndNew)
WCOLOR = RGB(255, 255, 255)
HRGN = CreateRectRgn(LREC.Left, LREC.Top, LREC.Right, LREC.Bottom)
HBRUSH = CreateSolidBrush(WCOLOR)
FillRgn Hwdc, HRGN, HBRUSH
End SubPrivate Sub Form_Unload(Cancel As Integer)
DestroyWindow HwndNew
End Sub