写了一个服务器程序,用了TextOut客户区中不能显示文本(如“my service..”),
原因不明(可能是不识别作为串尾标志的内容为零的字节)。换了CreateWindow(“text"...)勉强能达到了想要的效果。
当后台处理完要显示另一段时,只能再CreateWindow。请问各位专家,有更优的解决方案吗?

解决方案 »

  1.   

    就用TEXTOUT,
    检查你取得的DC是否有效,坐标是否正确
      

  2.   

    用DrawText()试试,功能强大。int DrawText(
      HDC hDC,          //  目标DC
      LPCTSTR lpString, //  字符串
      int nCount,       //  字符串长度
      LPRECT lpRect,    //  要写文字的矩形
      UINT uFormat      //  参数,如DT_CENTER为中间显示;
    );
      

  3.   

    DrawText()要是还是不行,估计就是你的DC不对了
      

  4.   

    谢谢各位热情的回复CServerMain::OnCreate(HWND hWnd,CREATESTRUCT FAR* lpCreateStruct)  //也许关键是OnCreate?
    {
    ......
    PAINTSTRUCT ps;
    HDC hdc=BeginPaint(hWnd, &ps);//GetDC(hWnd);
    RECT rt;
    rt.top=5;
    GetClientRect(hWnd, &rt);
    DrawText(hdc," P2P Server starting... \n\n",200, &rt, DT_CENTER);
    TextOut(hdc,50,70," hehe P2P Server starting... \n\n",90);
    EndPaint(hWnd, &ps);}以上我的源码。
      

  5.   

    你这个OnCreate处理的是WM_CREATE消息?在这里显示文字没用的,需要在WM_PAINT消息里显示,并且WM_PAINT消息外获取DC不能用BeginPaint,而应该是GetDC
      

  6.   

    谢谢7楼:是的,用CreateWindow可以显示文字。
    我想找更好的方法。
      

  7.   

    楼主在OnCreate中处理绘制这种做法有问题啊,如7楼所说。
    而且如果你的窗口是作为另一个父窗口的view,那么貌似在WM_CREATE时候获取的::getclientrect()为空值。
    只有在窗口显示之后才会有值。
      

  8.   

    1、创建新线程
    pparams = (PPARAMS)lpParam;
    SendMessage (pparams->hwnd, WM_CALC_DONE, 0, 0);主程序WndProc
    case WM_CALC_DONE:
    //MessageBox(NULL,"3.0","Server",MB_OK);
    // HWND hwndB = 
    CreateWindow("edit", " CCSp2p .. " ,WS_CHILD | WS_VISIBLE | BS_GROUPBOX 
     10 , 90 , 200 , 100 ,hWnd, NULL, NULL, NULL);LoadString(hInst,IDS_TEST, szHello, MAX_LOADSTRING);我用发消息的方式在主程序实现szhello的显示,可惜还是不利索!谢谢大伙踊跃参与。