当前位置:首页
开发技术指南» 文章正文
    引言:

 ·<form method=post action="register    »显示摘要«
    摘要: <form method=post action="register_confirm.jsp" onsubmit="return isvalid(this);"> 中onsubmit="return isvalid(this);">代表什么,3q ......
 ·时间查询呀    »显示摘要«
    摘要: 我想在我的做个手动选择的日期让它成为我的sql查询中的一个参数。怎么做,我搞了n久了还是不行呀! ......


对话框如何响应按键消息我想用来做按钮快捷键(在线等)

按钮可以定义快捷键,但是只有在按钮获得焦点时才有效  
  我希望无论什么时候都能响应按键消息  
  可是我用SPY发现对话框对按键消息不响应  
  问对话框能响应按键消息吗?如何实现?

NO.1   作者: wuprograme

在对话框中响应键盘消息只有直接在pretranslatemessage()中直接调用onkeydown()或onchar();  
 

NO.2   作者: laiyiling

方法一:  
  http://support.microsoft.com/?kbid=222829  
  1   插入一个新的Accelerator到资源里,把加速键和对应的响应控件关联  
  2   在对话框头文件中声明:  
      HACCEL   m_hAccel;  
  3   在对话框的构造函数里初始化m_hAccel  
      m_hAccel   =   ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1));  
  4   然后重载对话框的PreTranslateMessage函数,在  
  BOOL   CAboutDlg::PreTranslateMessage(MSG*   pMsg)    
  {  
        if   (m_hAccelTable)    
        {  
              if   (::TranslateAccelerator(m_hWnd,   m_hAccelTable,   pMsg))    
              {  
                    return(TRUE);  
              }  
        }  
        return   CDialog::PreTranslateMessage(pMsg);  
  }  
  方法二:  
  1       声明热键消息处理函数原型          
    在.h中消息映射声明处(AFX_mSG字样之后)加入如下语句:          
    LRESULT     OnHotKey(WPARAM     wParam,LPARAM     lParam);          
  2.     消息与相应处理函数相关联          
    在.Cpp中加入消息映射宏,使消息与相应处理函数发生关系,      
                ON_MESSAGE(WM_HOTKEY,OnHotKey);          
  3.     为方便以后的操作    
          预先在类中创建一个响应WM_CREATE和WM_DESTROY消息的函数      
                OnCreate()与OnDestroy()的框架  
  4.向系统登记热键          
    在OnCreate()函数中加入如下代码以向系统登记热键,本例子的热键设为      
                Ctrl+Shift+A.          
    RegisterHotKey(m_hWnd,1001,MOD_CONTROL|MOD_SHIFT,A);          
    RegisterHotKey(m_hWnd,1002,MOD_CONTROL|MOD_SHIFT,a);          
    5.处理热键          
    在消息处理函数OnHotKey()中对热键进行处理,并可加入用户希望运行的程序代码      
    LRESULT   C****::OnHotKey(WPARAM     wParam,LPARAM     lParam)          
    if(wParam==1001||wParam==1002)          
    CWnd::SetForegroundWindow();//使得被激活窗口出现在前景          
    MessageBox("Hello!");          
                   //用户可在此添加代码          
    return     0;          
    6.程序运行完毕后解除热键          
    在OnDestroy()中通过UnRegisterHotKey()解除热键登记,释放系统资源.          
    UnRegisterHotKey(m_hWnd,1001);          
    UnRegisterHotKey(m_hWnd,1002);          
    7.编译并运行程序

NO.3   作者: goodboyws

用Accelerator,很佩服楼上,好详细啊

NO.4   作者: caocheng8230

我的做法是在preTranslateMessage()中去拦截消息然后组合消息,然后再处理

NO.5   作者: lianglp

建议注册系统热键来实现。这样太快了。


    摘要: 消息发送端: int npara = 0; cwnd* pwnd = cwnd::findwindow(null, "sniffer_udp"); if(pwnd) pwnd->sendmessage(wm_command, (lparam)&npara, (lparam)&npara); 消息接受端 bool snifferwnd::oncomm......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE