按下对话框标题栏上的关闭按钮,可对话框并没有关闭
编号:QA004582
建立日期: 2002年3月17日 最后修改日期:2002年3月17日
所属类别:
心如死水:
操作系统: Windows 2000 & Me & XP
编程工具: VB6.0
问题: '如果vb做不到请给我回复,别让我等到花儿也谢了。我给您发了几次信了。
1、创建后的对话框,按下标题栏上的关闭按钮,可对话框并没有关闭。
2、创建的对话框,并不像 MessageBox 一样使(hWndParen:识别对话框的窗体)处于静止状态。
3、在对话框上创建的按钮不响应键盘 TAB 键的焦点转移。
'谢谢先了 谢谢先了
Public Sub CreatefrmDlg()
Dim hDig As Long
Dim Dialog As DLGTEMPLATE
Dialog.cx = 100
Dialog.cy = 100
Dialog.Style = WS_VISIBLE Or DS_MODALFRAME Or WS_SYSMENU
Dialog.x = 0
Dialog.y = 0
hDig = DialogBoxIndirectParam(App.hInstance, Dialog, frmMain.hwnd, AddressOf DlgProc, 0)
If hDig <> 0 Then: ShowWindow hDig, 1
End Sub
Private Function DlgProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hBut1 As Long, hBut2 As Long
Select Case uMsg
Case WM_INITDIALOG
hBut1 = CreateWindowEx(0&, "BUTTON", "确定", WS_VISIBLE Or WS_CHILD Or BS_TEXT, 30, 10, 62, 24, hWnd, 0&,App.hInstance, 0&)
hBut2 = CreateWindowEx(0&, "BUTTON", "取消", WS_VISIBLE Or WS_CHILD Or BS_TEXT, 94, 10, 62, 24, hWnd, 1&, App.hInstance, 0&)
End Select
End Function
水平: 中级
回答:
主要的问题是你在DlgProc中没有响应WM_COMMAND。另外,一般OK按钮的ID为1,Cancel的ID为2。修改后的程序如下:
Public Sub CreatefrmDlg()
Dim hDig As Long
Dim Dialog As DLGTEMPLATE
Dialog.cx = 100
Dialog.cy = 100
Dialog.style = WS_VISIBLE Or DS_MODALFRAME Or WS_SYSMENU
Dialog.x = 0
Dialog.y = 0
hDig = DialogBoxIndirectParam(App.hInstance, Dialog, frmMain.hwnd, AddressOf DlgProc, 0)
End Sub
Private Function DlgProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim hBut1 As Long, hBut2 As Long
Select Case uMsg
Case WM_INITDIALOG
hBut1 = CreateWindowEx(0&, "BUTTON", "确定", WS_VISIBLE Or WS_CHILD Or BS_TEXT, 30, 10, 62, 24, hwnd, 1&, App.hInstance, 0&)
hBut2 = CreateWindowEx(0&, "BUTTON", "取消", WS_VISIBLE Or WS_CHILD Or BS_TEXT, 94, 10, 62, 24, hwnd, 2&, App.hInstance, 0&)
Case WM_COMMAND:
Debug.Print wParam
If wParam = IDCANCEL Then
EndDialog hwnd, 1
DlgProc = 1
End If
End Select
DlgProc = 0
End Function
之所以迟迟没有回答你的问题是因为我们不赞成采用这样的方式编写程序,这样并不能减少使用的资源,而且VB的长处也没有得到发挥。要想这样编程,还不如用C呢。我们有一个原则,就是优先回答那些多数用户都关心的问题。欢迎你继续提问,但我们不会再回答类似的问题。
此问题由李海回答。
| |
|
|
| |
|
|