Thread: Checking Menu Items

  1. #1
    Registered User
    Join Date
    Apr 2005
    Posts
    39

    Checking Menu Items

    Not sure if this should go here or in the C++ forum, so ill try here.

    I want to make a simple program, which creates a window (I got that part done). When the window opens, it displays a number (a variable). Then, there is a menu, which has multiple numbers on it, such as the numbers 1-10 under a popup called "1-10" etc. Ive got that part done too. I know how to make individual menu items with a check mark next to them, but how do you make only 1 have a check mark?

    For example, when you start the program, variable a=0. No menu items have check marks next to them. Then you select the number 2 on the menu. Now variable a=2, and the "2" menuitem has a check next to it. Then you select "1", and the variable a=1, and the "1" menuitem has a checkk next to it, and "2" does not.

    How would I go along doing this? It's probably simple...but I'm still new at this.

    EDIT: I just realized, I'm not sure how to display variables in windows. How would I do that?
    Last edited by Olidivera; 06-11-2005 at 03:01 PM.

  2. #2
    Handy Andy andyhunter's Avatar
    Join Date
    Dec 2004
    Posts
    540
    Sounds like your a starting to get in a little over your head. I am not trying to blow you off but you really need to get into windows programming from the ground up to have a good grasp of the API. I suggest getting a good book, aka Petzold's Windows Programming; or perhaps finding a good tutorial:
    Win tutorial

    Also if you haven't already I suggest learning C++ first(I am assuming that is the language you are using since it is the board you mentioned), then move onto Windows Programming. If you are not comfortable with the language you will be programming in then you will just wind up frustrating yourself.

    -Andy
    i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced

    It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah

    Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem

  3. #3
    Registered User
    Join Date
    Apr 2005
    Posts
    39
    Well, I guess the checking menuitems is kinda over my head...

    ...but how about the variables? Shouldn't that be simple? This information is apparently not in that guide your talking about...

  4. #4
    Handy Andy andyhunter's Avatar
    Join Date
    Dec 2004
    Posts
    540
    I am not trying to discourage you, it just appears that you have not really gotten into the windows api since the the problem in question is pretty mundane. However since C++ programmers generally have a harder time starting with the Windows API (since it is written in C) I will attempt to start you off in the right direction.


    Outputting text with Windows API

    The first function you want to look at here is TextOut. It has the following function definition:
    Code:
         TextOut(hdc, x, y, psText, iLength)
    where
         hdc - Handle to the device context (aka where you want to output text)
         x, y - coordinates to start writing text with (0,0) being the upper left hand corner
        psText - pointer to a string containing the text to be displayed
        iLenght - integer representing string's length (Textout does not recognize /0 denoting end of string)
    The second function to look at is sprintf, which is the window's brother of printf. In case you haven't had the opportunity to use it here is a quick rundown. Sprintf is a formatting text function that has its first argument of the buffer where the formatted text goes followed by an indeterminate number of arguments corrosponding to codes in the formatting string. Here is a look at the function definition:
    Code:
         sprintf(char *szbuffer, const char *szFormat, ...)
    Now an example of its use is:
    Code:
         char szBuffer[100];
         sprintf(szBuffer, "The sum of %i and %i is %i", 2, 2, 2+2)
    Now the char* szBuffer will contain the text:
    Code:
         The sum of 2 and 2 is 4
    Now you might be wondering what those %i things are. They are format specifiers that tell the function what kind of data it is going to put there, it is known as the character type. The following is a list of character types used by sprintf.

    Character Type Output format
    Code:
    c int or wint_t When used with printf functions, specifies a 
    single-byte character; when used with wprintf functions, specifies a wide character. 
    
    C int or wint_t When used with printf functions, specifies a 
    wide character; when used with wprintf functions, specifies a single-byte character. 
    
    d int Signed decimal integer. 
    
    i int  Signed decimal integer. 
    
    o int  Unsigned octal integer. 
    
    u int  Unsigned decimal integer. 
    
    x int Unsigned hexadecimal integer, using "abcdef." 
    
    X int Unsigned hexadecimal integer, using "ABCDEF." 
    
    e  double Signed value having the 
    form [ – ]d.dddd e [sign]ddd where d is a single decimal digit, dddd is one or more decimal digits, 
    ddd is exactly three decimal digits, and sign is + or –. 
    
    E double Identical to the e format except that E rather than e introduces the exponent. 
    
    f double Signed value having the form [ – ]dddd.dddd, where dddd is one or more decimal digits. The number of digits before the 
    decimal point depends on the magnitude of the number, and the
     number of digits after the decimal point depends on the requested precision. 
    
    g double Signed value printed in f or e format, whichever is more compact for the given value and precision. The e format 
    is used only when the exponent of the value is less than –4 or greater than or equal to the precision argument. 
    Trailing zeros are truncated, and the decimal point appears only if one or more digits follow it. 
    
    G double Identical to the g format, except that E, rather than e, introduces the 
    exponent (where appropriate). 
    
    n  Pointer to integer  Number of characters successfully written so far to the stream or buffer; this value is stored in the 
    integer whose address is given as the argument. 
    
    p Pointer to void Prints the address of the argument in hexadecimal digits. 
    
    s String  When used with printf functions, specifies a single-byte–character string; when used with wprintf functions, specifies 
    a wide-character string. Characters are printed up to the first 
    null character or until the precision value is reached. 
    
    S String
    Ok, almost there. The last part is putting these two functions together to achieve output to the screen. You may be saying well that's great but how to I get the size? A little detail I forgot to mention is that sprintf returns an integer representing the number of bytes written. You can use this feature to determine length for the TextOut function.

    Code:
    int iLength, a=2, b=2;
    char *szbuffer;
     . . . . . . .
    iLength = sprintf(szbuffer, "The sum of %i and %i is %i", a, b, a+b);
    TextOut(hdc, 0, 0, szbuffer, iLength);
    Now you should have obtained hdc during the call to begin paint or by using some other function. This is by far not all that is required knowledge for text outputting in Windows however I hope it serves to get you pointed in the right direction.

    -Andy
    Last edited by andyhunter; 06-12-2005 at 08:49 AM.
    i don't think most standard compilers support programmers with more than 4 red boxes - Misplaced

    It is my sacred duity to stand in the path of the flood of ignorance and blatant stupidity... - quzah

    Such pointless tricks ceased to be interesting or useful when we came down from the trees and started using higher level languages. - Salem

  5. #5
    Registered User
    Join Date
    Apr 2005
    Posts
    39
    Thanks for the help.

    EDIT:
    Quote Originally Posted by andyhunter
    Code:
         sprintf(char *szbuffer, const char *szFormat, ...)
    -Andy
    What's with the ...? Should something be there?
    Last edited by Olidivera; 06-12-2005 at 12:41 PM.

  6. #6
    carry on JaWiB's Avatar
    Join Date
    Feb 2003
    Location
    Seattle, WA
    Posts
    1,972
    It means its a variadic function (it takes an unspecified number of arguments)
    "Think not but that I know these things; or think
    I know them not: not therefore am I short
    Of knowing what I ought."
    -John Milton, Paradise Regained (1671)

    "Work hard and it might happen."
    -XSquared

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Another syntax error
    By caldeira in forum C Programming
    Replies: 31
    Last Post: 09-05-2008, 01:01 AM
  2. HELP!!!!emergency Problem~expert please help
    By unknowppl in forum C++ Programming
    Replies: 9
    Last Post: 08-21-2008, 06:41 PM
  3. HELP!!!!emergency ~expert please help
    By unknowppl in forum C Programming
    Replies: 1
    Last Post: 08-19-2008, 07:35 AM
  4. Profiler Valgrind
    By afflictedd2 in forum C++ Programming
    Replies: 4
    Last Post: 07-18-2008, 09:38 AM
  5. Problems about gcc installation
    By kevin_cat in forum Linux Programming
    Replies: 4
    Last Post: 08-09-2005, 09:05 AM