我在主窗口中建立了一个静态子窗口控件和一个滚动条控件,然后在主窗口的滚动消息WM_VSCROLL中使用ScrollWindow让静态窗口滚动。静态窗口中含有窗口容纳不下的文字信息。出现的问题:    窗口可以滚动,但滚动时,先前窗口中看不到的文字(窗口放不下)滚动不出来。从不可见部分出来的不是我想要的文字,而是滚动前一些文字的重影!!!!Why?
而且往回滚时,先前滚出去的文字也出现如上情况!!!!Why?一句话,凡是离开了静态窗口区域的文字滚动到客房区时都会有(非想要文字的)重影。求各位大侠不吝拔剑!!!

解决方案 »

  1.   

    静态窗口的重画要在单独在其子窗口处理程序中进行吗?我试过这各方法,好像没用。而且我在ScrollWindow之后立即用了UpdateWindow啊。
      

  2.   

    没遇到这种情况,你的OnDraw函数是怎样的?
      

  3.   

    当然要为static写一个独立的窗口过程。
    自己响应WM_VSCROLL和WM_HSCROLL,要怎么画就怎么画好了!
      

  4.   

    alanblack,我没用MFC,所以无OnDraw函数!!!!!我已经写了一个静态窗口过程呀,并在里面处理了WM_PAINT消息,可处理还是有问题,不知这与ScrollWindow的使用是否有关。
    别外我的静态窗口中的文字,是在其窗口处理程序中用DrawText画上去的,不是是否有影响。
      

  5.   

    各位给点意见啦,郁闷死了。静态窗口的消息处理过程如下:LRESULT CALLBACK TextProc(HWND hwnd2, UINT message, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc2;
    PAINTSTRUCT photostr;
    RECT recttxt;
    HBRUSH txtbr;
    GetClientRect(hwnd2,&recttxt); switch (message)
    {
    case WM_PAINT:
    hdc2=BeginPaint(hwnd2,&photostr);
    SetBkMode(hdc2,TRANSPARENT);
    SetTextColor(hdc2,RGB(68,200,30));
    txtbr=CreateSolidBrush(RGB(38,60,20));
    FillRect(hdc2,&recttxt,txtbr);
    DrawText(hdc2,jianjie,lstrlen(jianjie),&recttxt,DT_WORDBREAK | DT_LEFT);
    EndPaint(hwnd2,&photostr);
    return 0; }
    return CallWindowProc (TextPr, hwnd2, message, wParam,lParam) ;}
      

  6.   

    各位给点意见啦,郁闷死了。静态窗口的消息处理过程如下:LRESULT CALLBACK TextProc(HWND hwnd2, UINT message, WPARAM wParam, LPARAM lParam)
    {
    HDC hdc2;
    PAINTSTRUCT photostr;
    RECT recttxt;
    HBRUSH txtbr;
    GetClientRect(hwnd2,&recttxt); switch (message)
    {
    case WM_PAINT:
    hdc2=BeginPaint(hwnd2,&photostr);
    SetBkMode(hdc2,TRANSPARENT);
    SetTextColor(hdc2,RGB(68,200,30));
    txtbr=CreateSolidBrush(RGB(38,60,20));
    FillRect(hdc2,&recttxt,txtbr);
    DrawText(hdc2,jianjie,lstrlen(jianjie),&recttxt,DT_WORDBREAK | DT_LEFT);
    EndPaint(hwnd2,&photostr);
    return 0; }
    return CallWindowProc (TextPr, hwnd2, message, wParam,lParam) ;}