::GetDlgItemText( hDlg , IDC_myCtr , strItem[0] , 20);
结果总是不对,老报无效的窗口句柄的错误。
换用下面的代码:HWND h = ::GetDlgItem(hDlg ,IDC_myCtr );
SetWindowText( h , "ttttttttttt");
::GetWindowText( h , strItem[0] , 20 );结果SetWindowText函数能正常执行,GetWindowText函数一样也报无效的窗口句柄。
老天,什么回事,我都快晕了。请各位大哥帮忙解惑答疑啊,分数小弟多多的给。

解决方案 »

  1.   

    用一下CWnd* h=GetDlgItem(hDlg ,IDC_myCtr );
      

  2.   

    应该没问题,你把你的数组赋初值试试
    char strItem[20] = {0};
      

  3.   

    MSDN说 把GetDlgItem作为temp 指针,即不要(不赞成)进行赋值,如HWND h = ::GetDlgItem(hDlg ,IDC_myCtr );//被认为是不好的,直接利用看看行不行。
      

  4.   

    检查::GetWindowText( h , strItem[0] , 20 );这个语句调用的环境,如果你的这个对话框是模式对话框,在这个对话框类之外,你无法在运行时操纵对话框中的任何控件的,所以你的这个从窗口句柄得到字符串也只是个美好的想法。如果这个语句是在对话框类中调用的,不会有问题的,只是应该注意第二个参数应该是已分配内存的。
    char *strItem = new char(20);
    ::GetWindowText( h , strItem , 20 );
      

  5.   

    HWND h = ::GetDlgItem(hDlg, IDC_MyCtr); 
    这种用法是对的, 至于其后两句代码报错, 是因为h这个句柄是空的, 也就是你的 ID IDC_MyCtr写错了, 根本就没有这个 ID 的控件注意: 是区分大小写的
      

  6.   

    请把代码压成*.rar当附件发在我的论坛上发帖.
      
    压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.---------------------------------------------------我的论坛的地址www.vcshare.net/bbs/
      

  7.   

    ::GetWindowText( h , strItem[0] , 20 );
    如果strItem是CString,则用法不对可以改成:
    CHAR szItem[100];
    ::GetWindowText(h , strItem , sizeof(szItem));
      

  8.   

    还有跟踪 HWND h 的值,在SPY++里搜索一下,看看是否是正常的窗口句柄
      

  9.   

    HWND h = ::GetDlgItem(hDlg ,IDC_myCtr );
    ----------------------------------------
    ID错了吧,IDC_myCtrl,
    可以用AfxMessageBox()看看
    在这句代码后面加一句:
    CString szTemp;
    szTemp.Format("Handle: 0x%X", h);
    看看是否是有效的句柄?
      

  10.   

    现在搞定了,开始我是这样给数组初始化
    char* strItem[2] = {"no","no"};
    改成char* strItem[2] = {new char(2),new char(2)};
    就好了。