vb弹出对话框:在弹出模态对话框(消息框)的同时设置他的位置-vb教程来源: 发布时间:星期四, 2009年2月12日 浏览:121次 评论:0
ute;在弹出模态对话框 ![]() ![]() ´本例子掩饰和父窗体左上角对齐 ´根据BCB_FANS( 4大名捕的追杀令) ![]() ![]() ´仅供参考 ´附BCB_FANS源代码 ´BCB_FANS ( 4大名捕的追杀令) ´当MessageBox对话框显示 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ´ ´//替换主窗口 ![]() ![]() ![]() ´ ´void __fastcall TForm1::WndProc(Messages::TMessage &Message) ´{ ´ TForm::WndProc(Message); ´ ´ //失去焦点的前 ´ ![]() ![]() ´ { ´ } ´ //失去焦点的后 ´ ![]() ![]() ![]() ´ { ´ ![]() ![]() ´ { ´ HWND hWnd; ´ char ClassBuf[64]; ´ ´ hWnd = (HWND)Message.LParam; ´ GetClassName(hWnd,ClassBuf, ![]() ´ ´ //首先判断是否是MessageBox对话框 ![]() ´ ![]() ![]() ´ { ´ //再判断这个窗口是否是本身 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ´ DWORD dwProcessID; ´ ´ GetWindowThreadProcessId(hWnd,&dwProcessID); ´ ´ ![]() ![]() ![]() ´ { ´ //移动窗口 ![]() ´ MoveWindow(.......);//或者 ![]() ´ ´ //替换左边 ![]() ![]() ´ SetClassLong(hWnd,GCL_HICON,(long)Image1->Picture->Icon->Handle); ´ ´ //重新设置按钮 ![]() ´ HWND hTemp; ´ ´ hTemp = GetDlgItem(hWnd,1); ´ SetWindowText(hTemp,\"New Text For Button\"); ´ ´ //.........其他操作 ´ } ´ } ´ } ´ } ´} ´窗体 Option Explicit Private Sub Form_Load ![]() _disibledevent=> lRet = AppendMenu(lhSysMenu, MF_SEPARATOR, 0&, vbNullString) lRet = AppendMenu(lhSysMenu, MF_STRING, IDM_ABOUT, \"About...\") Show ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub Private Sub Form_MouseDown(Button As Integer, Sh ![]() Dim r As RECT Dim p As POINTAPI If Button = vbRightButton Then GetCursorPos p TrackPopupMenu lhSysMenu, 0, p.x, p.y, 0, Me.hwnd, r End If End Sub Private Sub Form_Unload(Cancel As Integer) SetWindowLong hwnd, GWL_WNDPROC, ProcOld End Sub ´模块 Option Explicit Public Declare Function TrackPopupMenu Lib \"user32\" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal x As Long, ByVal y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As RECT) As Long Public Declare Function GetCursorPos Lib \"user32\" (lpPo ![]() Public Declare Function SetWindowLong Lib \"user32\" Alias \"SetWindowLongA\" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function CallWindowProc Lib \"user32\" Alias \"CallWindowProcA\" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Public Declare Function AppendMenu Lib \"user32\" Alias \"AppendMenuA\" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long Public Declare Function Get ![]() Public Declare Function GetClassName Lib \"user32\" Alias \"GetClassNameA\" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long Public Declare Function GetWindowThreadProcessId Lib \"user32\" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Public Declare Function GetCurrentProcessId Lib \"kernel32\" ![]() Public Declare Function GetWindowRect Lib \"user32\" (ByVal hwnd As Long, lpRect As RECT) As Long Public Declare Function SetWindowPos Lib \"user32\" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Type POINTAPI x As Long y As Long End Type Public ProcOld As Long Public Const TPM_LEFTALIGN = &H0& Public Const WM_SYSCOMMAND = &H112 Public Const MF_SEPARATOR = &H800& Public Const MF_STRING = &H0& Public Const GWL_WNDPROC = (-4) Public Const IDM_ABOUT As Long = 1010 Public Const WM_COMMAND = &H111 Public Const WM_ACTIVATE = &H6 Public Const WA_INACTIVE = 0 Public lhSysMenu As Long, lRet As Long Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case iMsg Case WM_SYSCOMMAND If wParam = IDM_ABOUT Then MsgBox \"VB Move Messagebox demo\", vbInformation, \"About\" Exit Function End If Case WM_COMMAND If wParam = IDM_ABOUT Then MsgBox \"VB Move Messagebox demo\", vbInformation, \"About\" Exit Function Else CallWindowProc ProcOld, hwnd, WM_SYSCOMMAND, wParam, lParam WindowProc = 0 Exit Function End If Case WM_ACTIVATE If wParam = WA_INACTIVE Then Dim mywnd As Long Dim buf As String * 64 Dim oldrect As RECT GetWindowRect hwnd, oldrect mywnd = lParam GetClassName mywnd, buf, 64 If Mid(buf, 1, 6) = \"#32770\" Then Dim processid As Long GetWindowThreadProcessId mywnd, processid If processid = GetCurrentProcessId ![]() SetWindowPos mywnd, 0, oldrect.Left, oldrect.Top, oldrect.Right - oldrect.Left, oldrect.Bottom - oldrect.Top, 0 End If End If End If End Select WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam) End Function 0
相关文章读者评论发表评论 |