我想编一个不用鼠标的界面,可现在有几个棘手的问题,麻烦坛友给看一下:
1,在一个MFC主对话框上创建一个属性为“Child”的子对话框(非模态),主对话框上有按钮,子对话框也有按钮,能否让PreTranslateMessage同时相应两个对话框上的按钮。(自己觉得可能性不大)
2,还是上面那样,在一个MFC主对话框上创建一个属性为“Child”的子对话框(非模态)。如何在子对话框关闭的情况下,让主对话框迅速响应PreTranslateMessage。(现在情况是,子对话框关闭了,主对话框不响应PreTranslateMessage,只有点起了其中一个按钮后,才继续响应PreTranslateMessage);
1,在一个MFC主对话框上创建一个属性为“Child”的子对话框(非模态),主对话框上有按钮,子对话框也有按钮,能否让PreTranslateMessage同时相应两个对话框上的按钮。(自己觉得可能性不大)
2,还是上面那样,在一个MFC主对话框上创建一个属性为“Child”的子对话框(非模态)。如何在子对话框关闭的情况下,让主对话框迅速响应PreTranslateMessage。(现在情况是,子对话框关闭了,主对话框不响应PreTranslateMessage,只有点起了其中一个按钮后,才继续响应PreTranslateMessage);
解决方案 »
- 现在用api写音乐播放器遇到的问题,用了两天了,也解决不了。。。
- 熟悉GDI+的进 求助!!!
- HELP!! 熟悉CMPP协议的请进
- 如何预编绎DEBUG来得到错误信息
- 谁有visual chm 使用教程(百度上怎么也搜不到)
- 多媒体开发:因项目需求,需要开发一个媒体播放控件,请大家多给些思路.(高分送出,不够可加)
- 创建CPropertyPage对象,为什么有的用Create,有的用Construct,而有时不用。它们各有什么区别?
- 为什么在formview中绘图会闪烁?
- 给个创意吧!
- 请问有没有底层获得Mouse坐标的SDK Api,并且觉得VC IDE很奇怪,很MSDN有点不一致。
- VC中怎样将char[]转换 LPCTSTR类型
- VC三维立体仿真要学习哪些东西
子对话框onclose时给主对话框发消息,SendMessage
#include "stdafx.h"
#include "KEYDOWN.h"
#include "KEYDOWNDlg.h"
#include "ChildDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog
{
public:
CAboutDlg();// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA // ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CKEYDOWNDlg dialog
CChildDlg* pChildDlg;CKEYDOWNDlg::CKEYDOWNDlg(CWnd* pParent /*=NULL*/)
: CDialog(CKEYDOWNDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CKEYDOWNDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CKEYDOWNDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKEYDOWNDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}BEGIN_MESSAGE_MAP(CKEYDOWNDlg, CDialog)
//{{AFX_MSG_MAP(CKEYDOWNDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CKEYDOWNDlg message handlersBOOL CKEYDOWNDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
GetDlgItem(IDC_BUTTON1)->SetFocus();
return FALSE; // return TRUE unless you set the focus to a control
}void CKEYDOWNDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.void CKEYDOWNDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CKEYDOWNDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}void CKEYDOWNDlg::OnButton1()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_TIP)->SetWindowText("Button 1");
pChildDlg=new CChildDlg;
pChildDlg->Create(IDD_DIALOG1,this);
pChildDlg->ShowWindow(SW_SHOW);
}void CKEYDOWNDlg::OnButton2()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_TIP)->SetWindowText("Button 2");
}void CKEYDOWNDlg::OnButton3()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_TIP)->SetWindowText("Button 3");
}BOOL CKEYDOWNDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message==WM_KEYDOWN)
{
switch( pMsg->wParam )
{
case VK_F2:
OnButton1();
return TRUE; case VK_F3:
OnButton2();
return TRUE;
case VK_F4:
OnButton3();
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_TIP)->SetWindowText("Button1");
}void CChildDlg::OnButton2()
{
// TODO: Add your control notification handler code here
OnCancel();}
如果使用SendMessage要发送一个什么样的消息呢?
唉~~我表达能力也不好,兄弟你辛苦了。。