problem in Win32 API in visual c++

Started by
12 comments, last by MadsGustaf 17 years, 1 month ago
For some reason my code does not work in VC++ :S it works fine in Dev-C++. but in VC++ it gives me these errors:
Quote: Error 1 error C2440: '=' : cannot convert from 'const char [10]' to 'LPCWSTR' c:\Documents and Settings\mads\Dokumenter\Visual Studio 2005\Projects\hello worldww\hello worldww\s.cpp 39 Error 2 error C2664: 'MessageBox' : cannot convert parameter 2 from 'const char [37]' to 'LPCTSTR' c:\Documents and Settings\mads\Dokumenter\Visual Studio 2005\Projects\hello worldww\hello worldww\s.cpp 43 Error 3 error C2664: 'CreateWindowExW' : cannot convert parameter 2 from 'const char [10]' to 'LPCWSTR' c:\Documents and Settings\mads\Dokumenter\Visual Studio 2005\Projects\hello worldww\hello worldww\s.cpp 58 Error 4 error C2664: 'MessageBox' : cannot convert parameter 2 from 'const char [27]' to 'LPCTSTR' c:\Documents and Settings\mads\Dokumenter\Visual Studio 2005\Projects\hello worldww\hello worldww\s.cpp 60
•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜˜”*°•..•°*”˜˜”*°•.˜”*°•.˜”*°•. Mads .•°*”˜.•°*”˜.•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜.•°*”˜ ˜”*°•.˜”*°•.˜”*°•..•°*”˜I am going to live forever... or die trying!
Advertisement
Try turning off Unicode. Go to the Project menu, then Project Properties. Under Configuration Properties, select General, and make sure the box next to Character Set says Use Multi-Byte Character Set.
------------------------------Support the Blue Skies in Games Campaign!A blog... of sorts.As a general rule, if you don't have a general rule in your signature, you aren't as awesome as someone who does. General rules roxor teh big one one ones.
I maybe wrong but those errors appear if you don't use TEXT("<text here>"). Try it.
Those are quite definitely wide-character to narrow-character errors. Either turn off Unicode (which is probably better to support), or put the correct macro around any string literal.
[ search: google ][ programming: msdn | boost | opengl ][ languages: nihongo ]
I've had the problem too. Just do as programwizard said.

That should do it.
Someone who uses a, euhm..., delta!?
this is a little embaresing, but were do i find the Configuration Propertie?
•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜˜”*°•..•°*”˜˜”*°•.˜”*°•.˜”*°•. Mads .•°*”˜.•°*”˜.•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜.•°*”˜ ˜”*°•.˜”*°•.˜”*°•..•°*”˜I am going to live forever... or die trying!
Right click your project, go to "Project Properties"

Select "Configuation Properties->General" in the left tree plain

Insure "Character Set" is "Not Set" (ie, not UNICODE)

If you whish for wide strings, set it to "Multibyte character set" as programwizard said.
thanks! that solved it. unfuntualy it gives me a "new" problem. in VC++ the compiler complains about this code:
LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) //Denne procedure bliver kaldt hver gang der er en besked til vores vindue, eller dens vinduer, kig længere nede for forklaring{	switch(Msg){		case WM_CLOSE: //Øver, vi er nødt til at lukke			DestroyWindow(hwnd); //Destruer vores vindue		break;		case WM_DESTROY: //Lad os poste den sidste besked			PostQuitMessage(0);		break;		default: // Ikke noget vi gider at rode med, send den videre til default message handleren			DefWindowProc(hwnd, Msg, wParam, lParam);		break;		}}


and gives me this error:

Quote:
Error 1 error C4716: 'WndProc' : must return a value c:\documents and settings\mads\dokumenter\visual studio 2005\projects\hello worldww\hello worldww\s.cpp 20


the funny thing is, this error dosent show in Dev-C++, were it compiles and runs without a problem.

edit: shouldnt & organize my code on the forum?
•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜˜”*°•..•°*”˜˜”*°•.˜”*°•.˜”*°•. Mads .•°*”˜.•°*”˜.•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜.•°*”˜ ˜”*°•.˜”*°•.˜”*°•..•°*”˜I am going to live forever... or die trying!
Well, as the error says you need a return value. Do this:

LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
//Denne procedure bliver kaldt hver gang der er en besked til vores vindue, eller dens vinduer, kig længere nede for forklaring
{
switch(Msg){
case WM_CLOSE: //Øver, vi er nødt til at lukke
DestroyWindow(hwnd); //Destruer vores vindue
return TRUE;
case WM_DESTROY: //Lad os poste den sidste besked
PostQuitMessage(0);
return TRUE;
default: // Ikke noget vi gider at rode med, send den videre til default message handleren
DefWindowProc(hwnd, Msg, wParam, lParam);
return FALSE;

}

return FALSE;
}

cheers,
xarg
that gives me a ton of new errors. Heres the full code:

#include <windows.h>


const char KlasseNavn[] = "WIN32 API"; //Klasse navnet

LRESULT CALLBACK WndProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam) //Denne procedure bliver kaldt hver gang der er en besked til vores vindue, eller dens vinduer, kig længere nede for forklaring
{
switch(Msg){
case WM_CLOSE: //Øver, vi er nødt til at lukke
DestroyWindow(hwnd); //Destruer vores vindue
break;
case WM_DESTROY: //Lad os poste den sidste besked
PostQuitMessage(0);
break;
default: // Ikke noget vi gider at rode med, send den videre til default message handleren
DefWindowProc(hwnd, Msg, wParam, lParam);
break;

}

}

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
MSG Msg; //En message variabel
WNDCLASSEX wc; //Vores vindue klasse
HWND hwnd; // Handleren til vinduet


wc.cbSize = sizeof(WNDCLASSEX); //Størrelsen på WNDCLASSEX i bytes
wc.style = 0; //Ingen ekstra styles
wc.lpfnWndProc = WndProc; //Vindue proceduren, den tager sig af alle beskeder
wc.cbClsExtra = 0; //Skal vi ikke bruge
wc.cbWndExtra = 0; //Skal vi ikke bruge
wc.hInstance = hInstance; //hIstance, kommer fra hInstance, variablen i WinMain.
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //Load et ikon
wc.hCursor = LoadCursor(NULL, IDC_ARROW); //Load en cursor
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //Vælg farve til vinduet
wc.lpszMenuName = NULL; //Ingen menu
wc.lpszClassName = KlasseNavn; //Vores klassenavn
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //Load et lille ikon

if(!RegisterClassEx(&wc)){ //Forsøger at registrere vores vindue klasse, ellers spytter vi en box i hovedet på brugeren, og stopper programmet
MessageBox(NULL, "Kunne ikke registrere vindue klassen", "Fejl", MB_OK | MB_ICONEXCLAMATION);
return 0; //Stopper programmet
}
//Så skal vi lave selve vinduet
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, //Laver en kant på vinduet
KlasseNavn, //Angiver vores klasse navn
"Hej verden, nu fra et vindue", //Titlen på vores vindue
WS_OVERLAPPEDWINDOW, //Angiver at det er et normalt vindue vi vil lave (dette er en sammentrækning af en masse styles)
CW_USEDEFAULT, //Vælg en standard x poisition til vinduet
CW_USEDEFAULT, //Vælg en standard y poisition til vinduet
300, //Bredden på vinduet
200, //Højden på vinduet
NULL, //Vi har ingen ejer af vinduet
NULL, //Ingen menu
hInstance, //Handleren til .exe filen
NULL); //Skal vi ikke bruge
if(hwnd == NULL){ //Vinduet kunne ikke oprettes, smid en fejl i hovedet på brugeren og luk ned
MessageBox(NULL, "Kunne ikke oprette vinduet", "Fejl", MB_OK | MB_ICONEXCLAMATION);
return 0; //Stopper programmet
}

//Hvis vi er nået så langt, har vi en vindue, og en vindue klasse, nu mangler vi bare at vise vores vindue, og sørge for at fange alle messages der bliver sendt til det.

ShowWindow(hwnd, nCmdShow); //Viser vores vindue, paramenteren nCmdShow, er måden det skal vises på, og vi viser det, ligesom det er blevet ønsket.
UpdateWindow(hwnd); //Opdaterer vores vindue

//Dette er lidt tricky, dette loop sørger for at vores vindue, modtager alle messages, der bliver sendt til den, d.v.s. at vi får atvide, når f.eks. at vores vindue bliver oprette. Når det resizes osv.
while(GetMessage(&Msg, hwnd, 0, 0) > 0){ //Der er en besked fortsæt
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}

return Msg.wParam; //Retunerer Msgs wParam
}

i dont know the macro to enclose my code in a codeblock, sorry.
•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜˜”*°•..•°*”˜˜”*°•.˜”*°•.˜”*°•. Mads .•°*”˜.•°*”˜.•°*”˜˜”*°•.˜”*°•..•°*”˜.•°*”˜.•°*”˜ ˜”*°•.˜”*°•.˜”*°•..•°*”˜I am going to live forever... or die trying!

This topic is closed to new replies.

Advertisement