Register | Login
Views: 19364387
Main | Memberlist | Active users | ACS | Commons | Calendar | Online users
Ranks | FAQ | Color Chart | Photo album | IRC Chat
11-02-05 12:59 PM
0 user currently in Programming. | 3 guests
Acmlm's Board - I2 Archive - Programming - A few C/++ Questions | |
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
User Post
windwaker

Ball and Chain Trooper
WHY ALL THE MAYONNAISE HATE
Level: 61

Posts: 1445/1797
EXP: 1860597
For next: 15999

Since: 03-15-04

Since last post: 4 days
Last activity: 6 days
Posted on 04-26-05 07:44 AM Link | Quote
Well, I'm *trying* to start with C, something just as/more useful than PHP.

How do you include compiled .rc files when using MinGW? I'm not really sure at all on this whole thing, as windres will convert .rc to .o, etc.

What functions do I use to screw with dialogs and such? I've searched for a list of this to no avail.

Easy question; what's the syntax for using variables? In PHP, it's not supposed to be in quotes, for instance:

echo "omgomg variable is: ". $var ." OMG.";

I haven't found anything that talks about the variable syntax.

And finally, is there a major resource (besides, ew, MSDN) with the C functions, such as php.net is for PHP?

edit on the syntax (wow I'm an idiot), it's just %d %d %d, the actual variable repeated at the end.


(edited by windwaker on 04-25-05 02:52 PM)
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 4285/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 04-26-05 08:16 AM Link | Quote
Well let's see, where to start here...

1) What I do is edit my makefile (a batch file) to have windres compile them before the program. Then I'm pretty sure you just include them in the call to gcc, like "gcc -o program.c resource.o" or something like that.

2) DialogBox() is one, I think another was something like CreateDialog()... MSDN has tons of info on this (and no, you don't need a license of, or even to be running, any Microsoft product to view it ). The biggest thing to keep in mind is that controls are treated just like windows, which can be confusing at times. (Also, there's MessageBox() for a pre-made, generic message box.)

3) Depends what kind and how you're using them. printf("%d",Var) prints a numeric variable. printf("%s",Str) prints a string. printf("%c",Var) prints a character (which can be a number, for example 31 prints an exclamation point). You can format them too: %3d = " 42", %03d = "042", and even hex: %x = "2a", %X = "2A", %03X = "02A" and so on.
Outside of printf() it's pretty simple.
Var = Var + 2; //Self-explanatory
Var += 2; //Same as above
Var++; //Same as 'Var = Var + 1', and yes, you can do -= and -- too
&Var; //Pointer to Var (This would be int*, not int, or whatever type it is)

4) MSDN, unlike most things Microsoft (), isn't all that bad. If you just use the search instead of trying to navigate manually, you should be alright. Besides that, typing a function's name (with or without brackets) usually yeilds good results, but you might need to add 'c' or 'c++' to the query.
windwaker

Ball and Chain Trooper
WHY ALL THE MAYONNAISE HATE
Level: 61

Posts: 1446/1797
EXP: 1860597
For next: 15999

Since: 03-15-04

Since last post: 4 days
Last activity: 6 days
Posted on 04-26-05 09:38 AM Link | Quote
Hey, thanks for your help, man. So you tell the compiler the object files when compiling, allowing resource files to be used. I'll edit some more questions if I have any into this.

And for now.

DANCE.EXE


(edited by windwaker on 04-25-05 04:38 PM)
Parasyte

Bullet Bill
Level: 35

Posts: 471/514
EXP: 267348
For next: 12588

Since: 05-25-04

Since last post: 104 days
Last activity: 32 days
Posted on 04-27-05 03:46 AM Link | Quote
Bookmark this link immediately: Individual Control Information. This is probably going to be the link you will use most on MSDN. (And always use the MSDN Library. It's important to note the Library because HyperHacker didn't link directly to it. Though he probably should have.)

The Individual Control Information page will tell you how to control all aspects of any control (window) in your program. Whether it's a button, check box, listbox, combo box, edit box, scroll bar, etc. That page has everything related to controls. And to help you imagine what HyperHacker ment by "all controls are windows" you can look up some of the Window manipulation function on MSDN, such as MoveWindow() -- which you can use to move and resize your main window or dialog, as well as any control window on it.
For more information on Dialog Boxes and Windows: MSDN Windowing.

Finally, when you ask for "a major resource with C functions" you're actually asking about the standard C libraries. Because, you see, the C language does not contain any functions at all; All functions are a product of the C language. However, most compilers come packed with standard libraries for your C programs to make use of. And for a list of the standard libs, you can try (one of my favourite resources) The Cplusplus.com STD Lib reference. Just be sure to steer clear of the iostream stuff, and stick with the links under "C standard library".


(edited by Parasyte on 04-26-05 10:52 AM)
(edited by Parasyte on 04-26-05 10:53 AM)
windwaker

Ball and Chain Trooper
WHY ALL THE MAYONNAISE HATE
Level: 61

Posts: 1448/1797
EXP: 1860597
For next: 15999

Since: 03-15-04

Since last post: 4 days
Last activity: 6 days
Posted on 04-27-05 08:50 AM Link | Quote
Whoa, thanks tons for that, Para. I couldn't really find any specific control info without knowing the functions from MSDN, that helps tons.

I have another question though, and I've looked through the MinGW documentation for this; how do you create executable and include a resource file? I've compiled resource files into object files, but I haven't found anything about including object files into a compilation. I also tried the thing Hyper suggested.
Ramsus

Octoballoon
Level: 19

Posts: 57/162
EXP: 34651
For next: 1126

Since: 01-24-05
From: United States

Since last post: 39 days
Last activity: 71 days
Posted on 04-27-05 01:14 PM Link | Quote
GCC when called without the -c flag will link and build the executable from all source and object files given to it, and then either output a.out (a.exe for MingW) or what you tell it to with -o (e.g. gcc -o test.exe test.c).

You can use the -c flag to compile each source file into an object file:
gcc -c source1.c # output source1.o
gcc -c source2.c # outputs source2.o
etc.

Then just call gcc and list all of the object files (and also source files) you want to use. It'll go ahead and call the linker and everything for you:

gcc -o source.exe main.c source1.o source2.o

With windows programs, be sure to include -mwindows and the resource file object:

gcc -o source.exe main.c source1.o source2.o res.o -mwindows


This is basic gcc usage, so remember it.
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 4299/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 04-30-05 05:18 AM Link | Quote
Er yeah, I did mean the MSDN library, but I usually just go to msdn.microsoft.com and type whatever function I'm looking for in the search box. If it exists it'll be the first or second result.
windwaker

Ball and Chain Trooper
WHY ALL THE MAYONNAISE HATE
Level: 61

Posts: 1469/1797
EXP: 1860597
For next: 15999

Since: 03-15-04

Since last post: 4 days
Last activity: 6 days
Posted on 05-01-05 04:54 AM Link | Quote
Ah, thanks, that's what I had to do.

The only thing that I don't seem to get right now is where I input the dialog name and everything. Like, when using CreateDialog():

HWND CreateDialog(

HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);


Do I... replace lpTemplate with the dialog ID? (my included resource.h file includes #define DLG_0100 100)

If so, I have no idea what to put in the other parameters. ;>.>
Dish

Spiny
Level: 38

Posts: 378/596
EXP: 355646
For next: 14801

Since: 03-15-04
From: Disch

Since last post: 18 days
Last activity: 18 days
Posted on 05-01-05 05:11 AM Link | Quote
CreateDialog does a Modeless dialog (active alongside the parent). If you want a Modal dialog (takes control -- parent does not get control back until dialog is closed), look at DialogBox. I'm not sure you can make a Modeless dialog without having a parent window. I recall it being problematic for me in the past.

Most of this stuff could be figured by actually READING the remarks section under the function name ;P.. .but anyway:

hInstance - the instance of the application to load the dialog from (just pass it the instance passed to your program in WinMain() )

lpTemplate - the ID to the dialog -- although if your dialog ID is in integer form you need to use the MAKEINTRESOURCE macro. For your DLG_0100 (crummy name, btw ;P ) you'd do: MAKEINTRESOURCE( DLG_0100 )

hWndParent - handle to the parent window. NULL would specify the desktop as the parent (although, again, I think modeless dialogs need to have a parent window within the program).

lpDialogFunc - the window procedure for the dialog. All windows messages and control notifications will be passed to this function. The param itself is a function pointer. For more info on how to declare this function look up DLGPROC on MSDN.



When you're done with the dialog, DestroyWindow() gets rid of Modeless dialogs, whereas EndDialog() gets rid of Modal dialogs. Again I really suggest looking at DialogBox() unless you're sure you want a modeless dialog.
windwaker

Ball and Chain Trooper
WHY ALL THE MAYONNAISE HATE
Level: 61

Posts: 1501/1797
EXP: 1860597
For next: 15999

Since: 03-15-04

Since last post: 4 days
Last activity: 6 days
Posted on 05-06-05 07:35 AM Link | Quote
*bumps after much attempt and frustration*

#include "stdio.h"
#include "windows.h"
#include "resource.h"

BOOL CALLBACK DialogProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR szCmdLine,
int iCmdShow)
{
DialogBox (hInstance, MAKEINTRESOURCE(DIALOG), NULL, (DLGPROC)DialogProc);
return (0);
}


Error report:

file.obj : error LNK2019: unresolved external symbol "int __stdcall DialogProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DialogProc@@YGHPAUHWND__@@IIJ@Z) referenced in function _WinMain@16

I've looked through much source code on and off MSDN, and this seems like it should be valid.
Ramsus

Octoballoon
Level: 19

Posts: 59/162
EXP: 34651
For next: 1126

Since: 01-24-05
From: United States

Since last post: 39 days
Last activity: 71 days
Posted on 05-06-05 07:59 AM Link | Quote
Did you actually implement DialogProc?
Dish

Spiny
Level: 38

Posts: 390/596
EXP: 355646
For next: 14801

Since: 03-15-04
From: Disch

Since last post: 18 days
Last activity: 18 days
Posted on 05-06-05 10:10 AM Link | Quote
"Unresolved External" errors typically occur when you reference functions that have no body. You have the DialogProc prototype, and you reference the function by passing a pointer to it to DialogBox, but you don't have a DialogProc function body anywhere (or at least it's not finding it)
Parasyte

Bullet Bill
Level: 35

Posts: 499/514
EXP: 267348
For next: 12588

Since: 05-25-04

Since last post: 104 days
Last activity: 32 days
Posted on 05-06-05 10:12 AM Link | Quote
Apparently not. There's a prototype, but no function.
HyperLamer
<||bass> and this was the soloution i thought of that was guarinteed to piss off the greatest amount of people

Sesshomaru
Tamaranian

Level: 118

Posts: 4347/8210
EXP: 18171887
For next: 211027

Since: 03-15-04
From: Canada, w00t!
LOL FAD

Since last post: 2 hours
Last activity: 2 hours
Posted on 05-07-05 05:48 AM Link | Quote
If that's your entire source, then yeah, that's the problem. It's one of the dumber-seeming (but actually not that dumb) things about C. You have to declare functions twice; once as a prototype and once as the function itself. Generally you'd use a header file for this. (I just stick them all in main.h but I do sort by file.) Basically you write a function:

void DoSomethingUseful()
{
//Todo: Code!
}


Then you copy everything up to the ), paste into the header file, and add a semicolon:
void DoSomethingUseful();
BOOL IsComputerOn();
int GetShoeSize(BODYPART* foot);


It's simple enough. It will get you from time to time; generally you'll get errors saying declarations don't match and/or are declared in odd places if you change one and not the other.
Add to favorites | "RSS" Feed | Next newer thread | Next older thread
Acmlm's Board - I2 Archive - Programming - A few C/++ Questions | |


ABII


AcmlmBoard vl.ol (11-01-05)
© 2000-2005 Acmlm, Emuz, et al



Page rendered in 0.010 seconds.