Outputting String arrays in windows

This is a discussion on Outputting String arrays in windows within the Game Programming forums, part of the General Programming Boards category; Ok, I am making a battleship game, where I created an array of characters, 10x10. I filled every little element ...

  1. #1
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035

    Post Outputting String arrays in windows

    Ok, I am making a battleship game, where I created an array of characters, 10x10. I filled every little element with a '1'. When I created nested loops and TextOut to display the grid, it never showed. Once I got it to actually tell me somthing, but it didn't like haveing an array as the string to output.
    Code:
    	case WM_PAINT:	//Repainting the Window
    		{
    			hdc = BeginPaint(hwnd, &ps);
    			hdc=GetDC(hwnd);
    			int br=0;
    			for (int x=0; x<10; x++)
    			{
    				for (int y=0; y<10; y++)
    				{
    				TextOut(hdc, br, 0, grid[x][y], grid[x][y]);
    				br+=2;
    				}
    			}
    			
    			
    			EndPaint(hwnd, &ps);
    			return(0);
    		}break;
    Oh, and here is my array:

    Code:
    char grid[10][10] = {
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'},
    	{'1','1','1','1','1','1','1','1','1','1'}
    }
    Could someone PLEASE tell me how to output this array to the screen with textout()! Thanks in advance.

  2. #2
    zen
    zen is offline
    of Zen Hall zen's Avatar
    Join Date
    Aug 2001
    Posts
    1,007
    A couple of points -

    1) You don't need to get the dc twice.

    2) Characters are larger than 1 or 2 pixels wide. You'll either have to use some value that you know will be greater that the max width/height or get the average values.

    3) The TextOut function is parameters are hdc,x,y,LPCSTRint.

    Something like this should draw a grid of 1's -

    Code:
    case WM_PAINT:
    		{
    		
    			hdc = BeginPaint(hWnd, &ps);
    			
    			for (int x=0; x<200; x+=20)
    			{
    				for (int y=0; y<200; y+=20)
    				{
    				TextOut(hdc,y, x, &grid[x/20][y/20], 1);
    				
    				}
    			}
    			EndPaint(hWnd, &ps);
    		
    		}break;
    zen

  3. #3
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035
    thanks but it still doesn't work
    why did you make the grid look like a refrence?

  4. #4
    zen
    zen is offline
    of Zen Hall zen's Avatar
    Join Date
    Aug 2001
    Posts
    1,007
    What's a refrence? How do you want it to look?
    zen

  5. #5
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035
    in other word nothing is working

  6. #6
    zen
    zen is offline
    of Zen Hall zen's Avatar
    Join Date
    Aug 2001
    Posts
    1,007
    Ok, I've no idea what you're doing without seeing your code. Don't you want a 10x10 grid?
    zen

  7. #7
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035
    yes, i want a 10x10 grid. Then I want a loop that uses TextOut() to display every little '1' in the grid.

  8. #8
    Skunkmeister Stoned_Coder's Avatar
    Join Date
    Aug 2001
    Posts
    2,572
    If you are using TextOut you will want to get some details about the current font and character sizes first.You need to know the client area size so in your WM_SIZE do something like this...
    ClientWidth=LOWORD(lParam);
    ClientHeight=HIWORD(lParam);
    These variables need to be statically allocated to your winproc.
    now maybe in WM_CREATE you need to make a call to GetTextMetrics(HDC,TEXTMETRIC&).look it up at msdn.From that you can work out whether you have a fixed width or variable width font.You will also need to work out your text dimensions such as average char width and average char height.Once you have that part done you can now work out how many lines of text you can get into the client area and how many chars you can fit on a line. for more info look at msdn
    Free the weed!! Class B to class C is not good enough!!
    And the FAQ is here :- http://faq.cprogramming.com/cgi-bin/smartfaq.cgi

  9. #9
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035
    lets just forget this.

  10. #10
    Registered User
    Join Date
    Sep 2001
    Posts
    412
    One option is to store the array in memory in a way which will make it easier to display, while still being easy to use.

    A really easy thing to use, which makes printing and altering easy, would be an array that was contiguous in memory, with each row separated by newlines, and the end null terminated. Then, you could pass a pointer to the first character and let it print.

    This takes some code to setup, but it's not very hard. And it makes displaying as easy as passing grid[0] as the string parameter. This is probably the best way to internally represent the grid given what you are doing with it.

    Do this to init the grid:
    Code:
    char ** grid;
    int i;
    grid = (char **)malloc(sizeof(char * ) *10); //allocate pointers
    grid[0] = (char *)malloc(sizeof(char) * 12 * 10 + 1);//allocate the full array, contiguously
    for (i = 1; i < 10; i++){
       grid[i] = grid[0] + i * 12 * sizeof(char); //set each row ptr.
    }
    for (i = 0; i < 10; i++){
       grid[i][10] = 0x0D;
       grid[i][11] = 0x0A;
    }
    grid[9][12] = '\0'; // last row has 13 chars to accomodate \0
    //
    // Body here
    //
    free(grid[0]);
    free(grid);
    Now, grid[0] (or, if you prefer, you can use the equivalent by defintion expression *grid) is a char * which you can pass to a print function to print the whole array, with newlines, etc. Further, grid[i][j] is a character like your old array. The only differences is that there are extra characters -- the newline characters plus the null zero -- so each line is either 12 or 13 chars long, not 10. But just use i,j int he range of 0 thru 9, and it will behave like you want.
    Last edited by The V.; 11-12-2001 at 08:37 PM.

  11. #11
    Skunkmeister Stoned_Coder's Avatar
    Join Date
    Aug 2001
    Posts
    2,572
    here is some sample code from petzold that illustrates use of textout ( and scrollbars as a plus!)
    Code:
    /*-----------------------------------------------
       SYSMETS.H -- System metrics display structure
      -----------------------------------------------*/
    
    #define NUMLINES ((int) (sizeof sysmetrics / sizeof sysmetrics [0]))
    
    struct
    {
         int     iIndex ;
         TCHAR * szLabel ;
         TCHAR * szDesc ;
    }
    sysmetrics [] =
    {
         SM_CXSCREEN,             TEXT ("SM_CXSCREEN"),              
                                  TEXT ("Screen width in pixels"),
         SM_CYSCREEN,             TEXT ("SM_CYSCREEN"),              
                                  TEXT ("Screen height in pixels"),
         SM_CXVSCROLL,            TEXT ("SM_CXVSCROLL"),             
                                  TEXT ("Vertical scroll width"),
         SM_CYHSCROLL,            TEXT ("SM_CYHSCROLL"),             
                                  TEXT ("Horizontal scroll height"),
         SM_CYCAPTION,            TEXT ("SM_CYCAPTION"),             
                                  TEXT ("Caption bar height"),
         SM_CXBORDER,             TEXT ("SM_CXBORDER"),              
                                  TEXT ("Window border width"),
         SM_CYBORDER,             TEXT ("SM_CYBORDER"),              
                                  TEXT ("Window border height"),
         SM_CXFIXEDFRAME,         TEXT ("SM_CXFIXEDFRAME"),          
                                  TEXT ("Dialog window frame width"),
         SM_CYFIXEDFRAME,         TEXT ("SM_CYFIXEDFRAME"),          
                                  TEXT ("Dialog window frame height"),
         SM_CYVTHUMB,             TEXT ("SM_CYVTHUMB"),              
                                  TEXT ("Vertical scroll thumb height"),
         SM_CXHTHUMB,             TEXT ("SM_CXHTHUMB"),              
                                  TEXT ("Horizontal scroll thumb width"),
         SM_CXICON,               TEXT ("SM_CXICON"),                
                                  TEXT ("Icon width"),
         SM_CYICON,               TEXT ("SM_CYICON"),                
                                  TEXT ("Icon height"),
         SM_CXCURSOR,             TEXT ("SM_CXCURSOR"),              
                                  TEXT ("Cursor width"),
         SM_CYCURSOR,             TEXT ("SM_CYCURSOR"),              
                                  TEXT ("Cursor height"),
         SM_CYMENU,               TEXT ("SM_CYMENU"),                
                                  TEXT ("Menu bar height"),
         SM_CXFULLSCREEN,         TEXT ("SM_CXFULLSCREEN"),          
                                  TEXT ("Full screen client area width"),
         SM_CYFULLSCREEN,         TEXT ("SM_CYFULLSCREEN"),          
                                  TEXT ("Full screen client area height"),
         SM_CYKANJIWINDOW,        TEXT ("SM_CYKANJIWINDOW"),         
                                  TEXT ("Kanji window height"),
         SM_MOUSEPRESENT,         TEXT ("SM_MOUSEPRESENT"),          
                                  TEXT ("Mouse present flag"),
         SM_CYVSCROLL,            TEXT ("SM_CYVSCROLL"),             
                                  TEXT ("Vertical scroll arrow height"),
         SM_CXHSCROLL,            TEXT ("SM_CXHSCROLL"),             
                                  TEXT ("Horizontal scroll arrow width"),
         SM_DEBUG,                TEXT ("SM_DEBUG"),                 
                                  TEXT ("Debug version flag"),
         SM_SWAPBUTTON,           TEXT ("SM_SWAPBUTTON"),            
                                  TEXT ("Mouse buttons swapped flag"),
         SM_CXMIN,                TEXT ("SM_CXMIN"),                 
                                  TEXT ("Minimum window width"),
         SM_CYMIN,                TEXT ("SM_CYMIN"),                 
                                  TEXT ("Minimum window height"),
         SM_CXSIZE,               TEXT ("SM_CXSIZE"),                
                                  TEXT ("Min/Max/Close button width"),
         SM_CYSIZE,               TEXT ("SM_CYSIZE"),                
                                  TEXT ("Min/Max/Close button height"),
         SM_CXSIZEFRAME,          TEXT ("SM_CXSIZEFRAME"),           
                                  TEXT ("Window sizing frame width"),
         SM_CYSIZEFRAME,          TEXT ("SM_CYSIZEFRAME"),           
                                  TEXT ("Window sizing frame height"),
         SM_CXMINTRACK,           TEXT ("SM_CXMINTRACK"),            
                                  TEXT ("Minimum window tracking width"),
         SM_CYMINTRACK,           TEXT ("SM_CYMINTRACK"),            
                                  TEXT ("Minimum window tracking height"),
         SM_CXDOUBLECLK,          TEXT ("SM_CXDOUBLECLK"),           
                                  TEXT ("Double click x tolerance"),
         SM_CYDOUBLECLK,          TEXT ("SM_CYDOUBLECLK"),           
                                  TEXT ("Double click y tolerance"),
         SM_CXICONSPACING,        TEXT ("SM_CXICONSPACING"),         
                                  TEXT ("Horizontal icon spacing"),
         SM_CYICONSPACING,        TEXT ("SM_CYICONSPACING"),         
                                  TEXT ("Vertical icon spacing"),
         SM_MENUDROPALIGNMENT,    TEXT ("SM_MENUDROPALIGNMENT"),     
                                  TEXT ("Left or right menu drop"),
         SM_PENWINDOWS,           TEXT ("SM_PENWINDOWS"),            
                                  TEXT ("Pen extensions installed"),
         SM_DBCSENABLED,          TEXT ("SM_DBCSENABLED"),           
                                  TEXT ("Double-Byte Char Set enabled"),
         SM_CMOUSEBUTTONS,        TEXT ("SM_CMOUSEBUTTONS"),         
                                  TEXT ("Number of mouse buttons"),
         SM_SECURE,               TEXT ("SM_SECURE"),                
                                  TEXT ("Security present flag"),
         SM_CXEDGE,               TEXT ("SM_CXEDGE"),                
                                  TEXT ("3-D border width"),
         SM_CYEDGE,               TEXT ("SM_CYEDGE"),                
                                  TEXT ("3-D border height"),
         SM_CXMINSPACING,         TEXT ("SM_CXMINSPACING"),          
                                  TEXT ("Minimized window spacing width"),
         SM_CYMINSPACING,         TEXT ("SM_CYMINSPACING"),          
                                  TEXT ("Minimized window spacing height"),
         SM_CXSMICON,             TEXT ("SM_CXSMICON"),              
                                  TEXT ("Small icon width"),
         SM_CYSMICON,             TEXT ("SM_CYSMICON"),              
                                  TEXT ("Small icon height"),
         SM_CYSMCAPTION,          TEXT ("SM_CYSMCAPTION"),           
                                  TEXT ("Small caption height"),
         SM_CXSMSIZE,             TEXT ("SM_CXSMSIZE"),              
                                  TEXT ("Small caption button width"),
         SM_CYSMSIZE,             TEXT ("SM_CYSMSIZE"),              
                                  TEXT ("Small caption button height"),
         SM_CXMENUSIZE,           TEXT ("SM_CXMENUSIZE"),            
                                  TEXT ("Menu bar button width"),
         SM_CYMENUSIZE,           TEXT ("SM_CYMENUSIZE"),            
                                  TEXT ("Menu bar button height"),
         SM_ARRANGE,              TEXT ("SM_ARRANGE"),               
                                  TEXT ("How minimized windows arranged"),
         SM_CXMINIMIZED,          TEXT ("SM_CXMINIMIZED"),           
                                  TEXT ("Minimized window width"),
         SM_CYMINIMIZED,          TEXT ("SM_CYMINIMIZED"),           
                                  TEXT ("Minimized window height"),
         SM_CXMAXTRACK,           TEXT ("SM_CXMAXTRACK"),            
                                  TEXT ("Maximum dragable width"),
         SM_CYMAXTRACK,           TEXT ("SM_CYMAXTRACK"),            
                                  TEXT ("Maximum dragable height"),
         SM_CXMAXIMIZED,          TEXT ("SM_CXMAXIMIZED"),           
                                  TEXT ("Width of maximized window"),
         SM_CYMAXIMIZED,          TEXT ("SM_CYMAXIMIZED"),           
                                  TEXT ("Height of maximized window"),
         SM_NETWORK,              TEXT ("SM_NETWORK"),               
                                  TEXT ("Network present flag"),
         SM_CLEANBOOT,            TEXT ("SM_CLEANBOOT"),             
                                  TEXT ("How system was booted"),
         SM_CXDRAG,               TEXT ("SM_CXDRAG"),                
                                  TEXT ("Avoid drag x tolerance"),
         SM_CYDRAG,               TEXT ("SM_CYDRAG"),                
                                  TEXT ("Avoid drag y tolerance"),
         SM_SHOWSOUNDS,           TEXT ("SM_SHOWSOUNDS"),            
                                  TEXT ("Present sounds visually"),
         SM_CXMENUCHECK,          TEXT ("SM_CXMENUCHECK"),           
                                  TEXT ("Menu check-mark width"),
         SM_CYMENUCHECK,          TEXT ("SM_CYMENUCHECK"),           
                                  TEXT ("Menu check-mark height"),
         SM_SLOWMACHINE,          TEXT ("SM_SLOWMACHINE"),           
                                  TEXT ("Slow processor flag"),
         SM_MIDEASTENABLED,       TEXT ("SM_MIDEASTENABLED"),        
                                  TEXT ("Hebrew and Arabic enabled flag"),
         SM_MOUSEWHEELPRESENT,    TEXT ("SM_MOUSEWHEELPRESENT"),     
                                  TEXT ("Mouse wheel present flag"),
         SM_XVIRTUALSCREEN,       TEXT ("SM_XVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen x origin"),
         SM_YVIRTUALSCREEN,       TEXT ("SM_YVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen y origin"),
         SM_CXVIRTUALSCREEN,      TEXT ("SM_CXVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen width"),
         SM_CYVIRTUALSCREEN,      TEXT ("SM_CYVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen height"),
         SM_CMONITORS,            TEXT ("SM_CMONITORS"),             
                                  TEXT ("Number of monitors"),
         SM_SAMEDISPLAYFORMAT,    TEXT ("SM_SAMEDISPLAYFORMAT"),     
                                  TEXT ("Same color format flag")
    } ;
    Code:
    /*----------------------------------------------------
       SYSMETS3.C -- System Metrics Display Program No. 3
                     (c) Charles Petzold, 1998
      ----------------------------------------------------*/
    
    #define WINVER 0x0500
    #include <windows.h>
    #include "sysmets.h"
    
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
         static TCHAR szAppName[] = TEXT ("SysMets3") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
         
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = szAppName ;
         
         if (!RegisterClass (&wndclass))
         {
              MessageBox (NULL, TEXT ("Program requires Windows NT!"), 
                          szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         
         hwnd = CreateWindow (szAppName, TEXT ("Get System Metrics No. 3"),
                              WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              CW_USEDEFAULT, CW_USEDEFAULT,
                              NULL, NULL, hInstance, NULL) ;
         
         ShowWindow (hwnd, iCmdShow) ;
         UpdateWindow (hwnd) ;
         
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }
    
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         static int  cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth ;
         HDC         hdc ;
         int         i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd ;
         PAINTSTRUCT ps ;
         SCROLLINFO  si ;
         TCHAR       szBuffer[10] ;
         TEXTMETRIC  tm ;
         
         switch (message)
         {
         case WM_CREATE:
              hdc = GetDC (hwnd) ;
              
              GetTextMetrics (hdc, &tm) ;
              cxChar = tm.tmAveCharWidth ;
              cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2 ;
              cyChar = tm.tmHeight + tm.tmExternalLeading ;
              
              ReleaseDC (hwnd, hdc) ;
    
                   // Save the width of the three columns
              
              iMaxWidth = 40 * cxChar + 22 * cxCaps ;
              return 0 ;
              
         case WM_SIZE:
              cxClient = LOWORD (lParam) ;
              cyClient = HIWORD (lParam) ;
    
                   // Set vertical scroll bar range and page size
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_RANGE | SIF_PAGE ;
              si.nMin   = 0 ;
              si.nMax   = NUMLINES - 1 ;
              si.nPage  = cyClient / cyChar ;
              SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
    
                   // Set horizontal scroll bar range and page size
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_RANGE | SIF_PAGE ;
              si.nMin   = 0 ;
              si.nMax   = 2 + iMaxWidth / cxChar ;
              si.nPage  = cxClient / cxChar ;
              SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
              return 0 ;
              
         case WM_VSCROLL:
                   // Get all the vertial scroll bar information
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_ALL ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
    
                   // Save the position for comparison later on
    
              iVertPos = si.nPos ;
    
              switch (LOWORD (wParam))
              {
              case SB_TOP:
                   si.nPos = si.nMin ;
                   break ;
                   
              case SB_BOTTOM:
                   si.nPos = si.nMax ;
                   break ;
                   
              case SB_LINEUP:
                   si.nPos -= 1 ;
                   break ;
                   
              case SB_LINEDOWN:
                   si.nPos += 1 ;
                   break ;
                   
              case SB_PAGEUP:
                   si.nPos -= si.nPage ;
                   break ;
                   
              case SB_PAGEDOWN:
                   si.nPos += si.nPage ;
                   break ;
                   
              case SB_THUMBTRACK:
                   si.nPos = si.nTrackPos ;
                   break ;
                   
              default:
                   break ;         
              }
                   // Set the position and then retrieve it.  Due to adjustments
                   //   by Windows it may not be the same as the value set.
    
              si.fMask = SIF_POS ;
              SetScrollInfo (hwnd, SB_VERT, &si, TRUE) ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
    
                   // If the position has changed, scroll the window and update it
    
              if (si.nPos != iVertPos)
              {                    
                   ScrollWindow (hwnd, 0, cyChar * (iVertPos - si.nPos), 
                                       NULL, NULL) ;
                   UpdateWindow (hwnd) ;
              }
              return 0 ;
              
         case WM_HSCROLL:
                   // Get all the vertial scroll bar information
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_ALL ;
    
                   // Save the position for comparison later on
    
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              iHorzPos = si.nPos ;
    
              switch (LOWORD (wParam))
              {
              case SB_LINELEFT:
                   si.nPos -= 1 ;
                   break ;
                   
              case SB_LINERIGHT:
                   si.nPos += 1 ;
                   break ;
                   
              case SB_PAGELEFT:
                   si.nPos -= si.nPage ;
                   break ;
                   
              case SB_PAGERIGHT:
                   si.nPos += si.nPage ;
                   break ;
                   
              case SB_THUMBPOSITION:
                   si.nPos = si.nTrackPos ;
                   break ;
                   
              default :
                   break ;
              }
                   // Set the position and then retrieve it.  Due to adjustments
                   //   by Windows it may not be the same as the value set.
    
              si.fMask = SIF_POS ;
              SetScrollInfo (hwnd, SB_HORZ, &si, TRUE) ;
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              
                   // If the position has changed, scroll the window 
    
              if (si.nPos != iHorzPos)
              {
                   ScrollWindow (hwnd, cxChar * (iHorzPos - si.nPos), 0, 
                                 NULL, NULL) ;
              }
              return 0 ;
    
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
    
                   // Get vertical scroll bar position
    
              si.cbSize = sizeof (si) ;
              si.fMask  = SIF_POS ;
              GetScrollInfo (hwnd, SB_VERT, &si) ;
              iVertPos = si.nPos ;
    
                   // Get horizontal scroll bar position
    
              GetScrollInfo (hwnd, SB_HORZ, &si) ;
              iHorzPos = si.nPos ;
    
                   // Find painting limits
    
              iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar) ;
              iPaintEnd = min (NUMLINES - 1,
                               iVertPos + ps.rcPaint.bottom / cyChar) ;
              
              for (i = iPaintBeg ; i <= iPaintEnd ; i++)
              {
                   x = cxChar * (1 - iHorzPos) ;
                   y = cyChar * (i - iVertPos) ;
                   
                   TextOut (hdc, x, y,
                            sysmetrics[i].szLabel,
                            lstrlen (sysmetrics[i].szLabel)) ;
                   
                   TextOut (hdc, x + 22 * cxCaps, y,
                            sysmetrics[i].szDesc,
                            lstrlen (sysmetrics[i].szDesc)) ;
                   
                   SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
                   
                   TextOut (hdc, x + 22 * cxCaps + 40 * cxChar, y, szBuffer,
                            wsprintf (szBuffer, TEXT ("%5d"),
                                 GetSystemMetrics (sysmetrics[i].iIndex))) ;
                   
                   SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
              }
    
              EndPaint (hwnd, &ps) ;
              return 0 ;
              
         case WM_DESTROY :
              PostQuitMessage (0) ;
              return 0 ;
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
    Free the weed!! Class B to class C is not good enough!!
    And the FAQ is here :- http://faq.cprogramming.com/cgi-bin/smartfaq.cgi

  12. #12
    Intranasal Heroin User Xterria's Avatar
    Join Date
    Sep 2001
    Location
    Buffalo, NY
    Posts
    1,035
    Thanks! I will need no more help...because I gave up. The only way now that I will make games in is DirectX with Graphics. I'll store all those code until I need it. Thanks again.


    =====
    now lets drop this
    =====

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Inheritance Hierarchy for a Package class
    By twickre in forum C++ Programming
    Replies: 7
    Last Post: 12-08-2007, 03:13 PM
  2. We Got _DEBUG Errors
    By Tonto in forum Windows Programming
    Replies: 5
    Last Post: 12-22-2006, 04:45 PM
  3. Message class ** Need help befor 12am tonight**
    By TransformedBG in forum C++ Programming
    Replies: 1
    Last Post: 11-29-2006, 10:03 PM
  4. String Compare Using Dynamic Arrays
    By djwicks in forum C Programming
    Replies: 4
    Last Post: 03-31-2005, 07:01 PM
  5. string handling
    By lessrain in forum C Programming
    Replies: 3
    Last Post: 04-24-2002, 07:36 PM

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21