Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   Unable to see text after scrolling Text (http://www.go4expert.com/forums/unable-text-scrolling-text-t26651/)

kiranbhatter 9Sep2011 15:27

Unable to see text after scrolling Text
 
Hi,
I have written a small C program using win32 functions.
I want to basically enable the line buffering. For ex: when the text reaches to the end of the window, i want to scroll the text to one line above then then print the next line to the end of the window.
Problem: I am able to scroll the text up when i reach to the end of the window but i m unable to see the next lines being printed to the end of the window.
Can you please point out the flaw in my code.
Collapse | Copy Code
Code:

// code for your reference //
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam )
{
        static      cxChar, cyChar, cxClient, cyClient, iVertPos = 0, iCnt = 0;
        HDC                        hdc;
        PAINTSTRUCT ps;
        TEXTMETRIC        tm;
        static                RECT rect;
        static      TCHAR cCh, cScrollFlag = 'N';
        TCHAR                szBuffer[30];
       
        switch( message )
        {
                case WM_CREATE:
                        hdc = GetDC( hwnd );
                        GetTextMetrics( hdc, &tm );
                        cxChar = tm.tmAveCharWidth;
                        cyChar = tm.tmHeight;
                        ReleaseDC( hwnd, hdc );
                        break;
 
                case WM_SIZE:
                        cxClient = LOWORD( lParam );
                        cyClient = HIWORD( lParam );
                       
                        rect.left  = cxChar;
                        rect.right  = cxClient;
                        rect.top    = cyChar;
                        rect.bottom = cyClient;
                       
                        InvalidateRect( hwnd, &rect, TRUE );
                       
                        break;
 
                case WM_CHAR:
                        cCh = wParam;
                        iVertPos = ++iCnt * cyChar;
 
                        if( iVertPos >= cyClient )  // reached to the end of the window //
                        {
                                cScrollFlag = 'Y';
                                ScrollWindow( hwnd, 0, -cyChar, &rect, &rect );
                        }
                        else                        // did not reach to the end of the window //
                        {
                                InvalidateRect( hwnd, &rect, FALSE );
                                cScrollFlag = 'N';
                        }
                        break;
 
                case WM_PAINT:
                        hdc = BeginPaint( hwnd, &ps );
                        wsprintf( szBuffer, TEXT("[%2d] Key pressed: %c, current pos: %d"), iCnt, cCh, iVertPos );
                        if( iVertPos )
                        {
                                if( cScrollFlag == 'Y' )  // if scrolling required //
                                {
                                        TextOut( hdc, cxChar, iVertPos, szBuffer, lstrlen( szBuffer ) );
                                }
                                else                    // scroll not required //
                                {
                                        TextOut( hdc, cxChar, iVertPos, szBuffer, lstrlen( szBuffer ) );
                                }
                        }
                        EndPaint( hwnd, &ps );
                        break;
 
                case WM_DESTROY:
                        PostQuitMessage(0);
                        break;
        }
        return DefWindowProc( hwnd, message, wParam, lParam );
}
//

Note: I wanted to achieve this using raw Win32 functions but not re-implementing the same using MFC or some other advanced concepts.



Thanks


All times are GMT +5.5. The time now is 08:58.