Przesiadka z Dev-C++ na Visual C++

0

Witam!

Dzisiaj doszedłem do wniosku, ze przesiadka z Dev-C++ na MS Visual C++ mnie nie ominie ;). Zaczalem od napisania prostego programiku w WinApi, a oto on:

#include <string>
#include <windows.h>

std::string nazwaklasy="KrukersProg";

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLince,int nShowCmd)
{
	WNDCLASSEX wc;

	ZeroMemory(&wc,sizeof(wc));
	wc.cbSize = sizeof(wc);
	wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
	wc.hCursor = LoadCursor(NULL,IDC_ARROW);
	wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);
	wc.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
	wc.hInstance = hInstance;
	wc.lpfnWndProc = WindowProc;
	wc.lpszClassName = nazwaklasy.c_str();
	
	RegisterClassEx(&wc);

	HWND hWnd;
	hWnd=CreateWindowEx(NULL,nazwaklasy.c_str(),"To już chyba drugi program ;)",
		                WS_OVERLAPPEDWINDOW,
					    CW_USEDEFAULT,CW_USEDEFAULT,
						CW_USEDEFAULT,CW_USEDEFAULT,
					    HWND_DESKTOP,NULL,hInstance,NULL);

	ShowWindow(hWnd,nShowCmd);
	
	MSG Msg;
	while(GetMessage(&Msg,NULL,0,0))
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}

	return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
		case WM_CLOSE:
			int odp;
			odp=MessageBox(hwnd,"Zamknąć program?","Zamykanie...",MB_YESNO|MB_ICONQUESTION);
			if(odp==IDYES)break; else return 0;
			break;
	
		case WM_QUIT:
			PostQuitMessage(0);
			return 0;
	}
	return DefWindowProc(hwnd,uMsg,wParam,lParam);
}

jak widać to zwykły szkielet programu w WinApi i teraz: gdy kompiluje go pod Dev-C++ wszystko gra, a gdy skompiluje go pod VC++ a nastepnie uruchomie i zamkne to po nacisnieciu Ctrl+Alt+Del na liscie programow pozostaje nazwa pliku *.exe tego programu.
Niby problem banalny a niewiem jak sie go pozbyć...
Z gory THX za ew. odpowiedzi :)

0

#include < windows.h >
static TCHAR nazwa[]=TEXT("OKIENKO");

LRESULT CALLBACK ProcOkna(HWND uchwyt,UINT komunikat,WPARAM wParam,LPARAM lParam)
{
switch (komunikat)
{
case WM_CREATE:
//
break;

    case WM_DESTROY:
    PostQuitMessage(0);
    break;

    case WM_KEYDOWN:
        switch (wParam)
        {
        case VK_ESCAPE:
        PostQuitMessage(0);
        break;
        }
    break;

default:
return (DefWindowProc(uchwyt,komunikat,wParam,lParam));
}
return(0L);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
WNDCLASS klasaokna;
HWND uchwyt;

klasaokna.style=CS_HREDRAW | CS_VREDRAW;
klasaokna.lpfnWndProc=ProcOkna;
klasaokna.cbClsExtra = 0;
klasaokna.cbWndExtra = 0;
klasaokna.hInstance = hInstance;
klasaokna.hIcon = NULL;
klasaokna.hCursor = LoadCursor(NULL, IDC_ARROW);
klasaokna.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
klasaokna.lpszMenuName = NULL;
klasaokna.lpszClassName = nazwa;

if(RegisterClass(&klasaokna)==0) return FALSE;

uchwyt=CreateWindow(nazwa,"pierwszy program w WINAPI",WS_OVERLAPPEDWINDOW,
100, 100, 400, 300,NULL, NULL, hInstance, NULL);

if(uchwyt==NULL) return FALSE;

ShowWindow(uchwyt,SW_SHOW);
UpdateWindow(uchwyt);

MSG komunikat;
while(GetMessage(&komunikat, NULL, 0, 0))
{
TranslateMessage(&komunikat);
DispatchMessage(&komunikat);
}
return komunikat.wParam;
}

0

znaleŹĆ szblon na necie to tez sobie potrafie, ale chodziło mi tu o wskazanie błędu, a nie pujscie na latwizne. Kluczem do sukcesu jest zrozumienie przyczyn a nie tylko skutków ;)
Juz wiem zresztą co jest tutaj zle :)
Z błedem sam sobie juz poradziłem [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1