我有一个CStringArray saUnit,里面若有10个字串,现在我取一个出来,用
::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);写入到记事本中,我后面的数据都用这样的方式写入,写一个换一行,如何来实现这样的功能,我像下面这样写,总是只写最后一个?
char szWrap[] = "\r\n";
CString szTmp;
for (unsigned long l = 0; l < 10; l++)
{
          szTmp = saUnit.GetAt(l);
szTmp.Trim();
char szData[1024] = {0};
strcpy(szData, szTmp.GetBuffer(0));
::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);
::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szWrap);
//int nLength=::SendMessage(hwnd, WM_GETTEXTLENGTH, NULL, NULL); 
//::SendMessage(hwnd, EM_SETSEL, nLength, nLength);
//m_edit.SetSel(nLength,  nLength); 
//::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szWrap);
}

解决方案 »

  1.   

    先WM_GETTEXT然后再WM_SETTEXT!
    即先获得然后再写!
      

  2.   

    既然已经获得句柄了,何不使用
    int GetWindowText(
      HWND hWnd,        // handle to window or control with text
      LPTSTR lpString,  // address of buffer for text
      int nMaxCount     // maximum number of characters to copy
    );和
    BOOL SetWindowText(
      HWND hWnd,         // handle to window or control
      LPCTSTR lpString   // address of string
    );
      

  3.   

    char szWrap[] = "\r\n";
    CString szTmp;
    for (unsigned long l = 0; l < 10; l++)
    {
              szTmp = saUnit.GetAt(l);
    szTmp.Trim();
    char szData[1024] = {0};
    strcat(szData, szTmp.GetBuffer(0));
    }
    ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);
    ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szWrap);char szData[1024]可能要定义大一点
      

  4.   

    WM_SETTEXT会把前面的文本替换掉,for (unsigned long l = 0; l < 10; l++)
    {
              szTmp = saUnit.GetAt(l);
    szTmp.Trim();
    char szData[1024] = {0};
    strcpy(szData, szTmp.GetBuffer(1024));
             szTmp.ReleaseBuffer();//很重要// ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);
    // ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szWrap);
    int nLength=::SendMessage(hwnd, WM_GETTEXTLENGTH, NULL, NULL); 
    ::SendMessage(hwnd, EM_SETSEL, nLength, nLength);
    ::SendMessage(hwnd, EM_REPLACESEL, (WPARAM)TRUE, (LPARAM)szWrap);
    }
      

  5.   

    既然已经获得句柄了,何不使用
    int GetWindowText(
      HWND hWnd,        // handle to window or control with text
      LPTSTR lpString,  // address of buffer for text
      int nMaxCount     // maximum number of characters to copy
    );和
    BOOL SetWindowText(
      HWND hWnd,         // handle to window or control
      LPCTSTR lpString   // address of string
    );
    ===================.
    跨进程只能发消息得到文本
      

  6.   

    错拉!哪个要定义在外面
    char szWrap[] = "\r\n";
    CString szTmp;
    char szData[1024] = {0};
    for (unsigned long l = 0; l < 10; l++)
    {
              szTmp = saUnit.GetAt(l);
    szTmp.Trim();
    strcat(szData, szTmp.GetBuffer(0));
    }
    ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);
    ::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szWrap);
      

  7.   

    EditBox控件最大的字节数是65535个!
      

  8.   

    你先把你的所有数据拼接成一个字符变量,然后一次性设置:CString szTmp;
    for (unsigned long l = 0; l < 10; l++)
    {
              szTmp + = saUnit.GetAt(l);   //拼接起来
    szTmp.Trim();
    }::SetWindowText(hEdit,szTmp.GetBuffer(0),szTmp.GetLength());
             //或者这样:
             //char *pBuffer=malloc(sizeof(char)*szTmp.GetLength()+1);
             //strcpy(pBuffer,szTmp.GetBuffer(0));
             //::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)pBuffer);
             //free(pBuffer);
      

  9.   

    SendMessage(hWnd, EM_SETSEL, -1, -1);
    SendMessage(hWnd, EM_REPLACESEL, 0, (LPARAM)szWrap);
      

  10.   

    给需要换行的地方加上\r\n
    然后整个输入::SendMessage(hwnd, WM_SETTEXT, NULL, (LPARAM)szData);