16,472
社区成员
发帖
与我相关
我的任务
分享
WNDPROC preProc;
LRESULT CALLBACK ControlTest(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
CControlPanelDlg* pWnd;
CString str;
str.Format(_T("AA"));
pWnd=(CControlPanelDlg*)CWnd::FromHandle(hwnd);
pWnd->m_Input.GetDInputData();
if(pWnd->m_Input.KeyKB[0].Key!=NULL) /*此为DirectInputDevice对象检
测是否有键盘有输入A~Z,如果有则m_Input.KeyKB[0].Key!=NULL为真。*/
{
pWnd->GetDlgItem(IDC_BUTTONDOWN)->SetWindowText(str);
return preProc(hwnd,uMsg,wParam,lParam);
}
else
{
pWnd->GetDlgItem(IDC_BUTTONDOWN)->SetWindowText(_T("NULL"));
return preProc(hwnd,uMsg,wParam,lParam);
}
}
WNDPROC preProc;
BOOL CControlPanelDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
preProc=(WNDPROC)SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)ControlTest);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
else
{
pWnd->GetDlgItem(IDC_BUTTONDOWN)->SetWindowText(_T("NULL"));
return preProc(hwnd,uMsg,wParam,lParam);
}
pWnd->GetDlgItem(IDC_BUTTONDOWN)->SetWindowText(str);
去掉之后就正常了,是不是因为在点击OK后对话框已经销毁了,但函数仍进入到else(…………)里面执行到
pWnd->GetDlgItem(IDC_BUTTONDOWN)->SetWindowText(str);
就报错了啊?仅仅是我的猜测,也不知道怎么修改