我有12个Editbox,需求是:
当按下粘贴快捷键,判断光标位置,当光标停留在前6个editbox,则把内容粘贴到前六个editbox,如果光标停留在后六个editbox,则把内容粘贴到后六个editbox,如果不在这12个里面,则不操作。
问题是,我应该如何判断,光标是在哪个editbox里面呢?
用了网上说的if(pEdit -> GetFocus() == GetDlgItem(IDC_EDIT1)||……)和
if(::GetFocus() == GetDlgItem(IDC_EDIT1)->m_hWnd||……)判断不了求助呀!~

解决方案 »

  1.   

    在每个Edit的OnFocus里等着,然后改变一个int的变量a.把自己的序号赋值给这个变量a就可以了,还有KillFocus也做a=-1,如果a=123, .....else if 456 ..... else ....
      

  2.   

    纠正一下错误:是SetFocus和KillFocus
      

  3.   

    最好的是重载CEdit类,添加=EN_SETFOCUS消息,因为有没有获取焦点,控件自己最清楚
      

  4.   

    因该是pdlgWnd->GetFocus() == GetDlgItem(IDC_EDIT1)->GetsafeHwnd()把,
    调用主对话框的GetFocus()才是获得当前焦点窗口的
      

  5.   

    是添加在每个EDIT的EN_SETFOCUS消息响应函数里面吗
      

  6.   

    我的目的是要把粘贴板里面的内容取出来,然后分别分成6组,每组3个字符,粘贴到6个editbox当中去,在pretranslatemessage中要拦截ctrl+v的快捷键,所以最好在那个里面能判断焦点在哪
      

  7.   

    尝试了,没用呀,你的pdlgWnd是什么类型的?我用CEDIT*和CWND*试了都不行呀
      

  8.   

    GetFocus()就行。不过,如果你调用GetFocus的线程与你的控件所在的线程不是同一个,那么在调用GetFocus之前,必须先AttachThreadInput。
    另外,CWnd::GetFocus()是static函数,谁发明的什么pEdit->GetFocus、pDlg->GetFocus()之类的调用写法?
      

  9.   

    不行,我是这么判断的,
    if(CWnd:: GetFocus() == GetDlgItem(IDC_S1)
    || CWnd:: GetFocus() == GetDlgItem(IDC_S2)
    || CWnd:: GetFocus() == GetDlgItem(IDC_S3)
    || CWnd:: GetFocus() == GetDlgItem(IDC_S4)
    || CWnd:: GetFocus() == GetDlgItem(IDC_S5)
    || CWnd:: GetFocus() == GetDlgItem(IDC_S6))
    {……}
    if(CWnd:: GetFocus() == GetDlgItem(IDC_E1)
    || CWnd:: GetFocus() == GetDlgItem(IDC_E2)
    || CWnd:: GetFocus() == GetDlgItem(IDC_E3)
    || CWnd:: GetFocus() == GetDlgItem(IDC_E4)
    || CWnd:: GetFocus() == GetDlgItem(IDC_E5)
    || CWnd:: GetFocus() == GetDlgItem(IDC_E6))
    {……}
    结果两个if都进去了囧
      

  10.   

    两个if都成立?恐怕你的GetFocus和GetDlgItem都返回NULL了吧。设个断点看看这些函数都返回什么不就清楚了?另外,你为什么不声明一个变量把GetFocus的返回值存起来?调用12遍GetFocus有意义吗?莫非一旦CPU闲下来一点你就觉得心里不痛快?
      

  11.   

    额开始写的时候没注意,觉着这么写比较整齐,用变量吧GetFocus存起来后,跟了下代码,返回值是:0x0012fbd8 {CMyEdit hWnd=???},GetDlgItem的返回值也是???,这个是NULL了吧?应该如何处理呢
      

  12.   

    ???是什么东西?你是跟出了作用域了吧。0才是NULL,既然返回0x0012fbd8,那就不是NULL。这样吧,你把GetFocus跟12个GetDlgItem用13个变量保存起来,然后用Debug看一下这13个变量的值分别都是多少。如果你两个if都成立的话,那显然应该后面12个值有重复了?
      

  13.   

    嗯,是我的OnChange里面有问题,每次粘贴完就自动跳转到到后六个对话框。。所以老出错,现在可以了,谢谢