[완료]visual studio 2010에서 api프로그램 질문입니다.

honggogo의 이미지

#include <windows.h>
 
ATOM RegisterMainWndClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
 
LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message,
							 WPARAM wParam, LPARAM lParam);
 
static TCHAR gszAppName[] = TEXT("HelloWin");			
 
// WinMain 함수 부분
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
 
	if(!RegisterMainWndClass(hInstance))
		return -1;
	// WNDCLASS 등록	
 
	if(!InitInstance(hInstance, SW_SHOWNORMAL))
		return -1;
	// 인스턴스 초기화
 
 
	// 메시지 루프 부분
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
 
	return msg.wParam;
}
// WNDCLASS 등록 부분
ATOM RegisterMainWndClass(HINSTANCE hInstance)
{	
	WNDCLASS wndclass;			
 
	wndclass.style			= CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc	= MainWndProc;					
	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 (HOLLOW_BRUSH);	
	wndclass.lpszMenuName	= NULL;
	wndclass.lpszClassName	= gszAppName;
 
	if (!RegisterClass (&wndclass))
	{
		MessageBox (NULL, TEXT("This program requires Windows XP!"), gszAppName, MB_ICONERROR);
		return 0;
	}	
	return RegisterClass(&wndclass);
}
 
 
// 인스턴스를 초기화 하는 부분
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
	HWND		hwnd;
 
	hwnd = CreateWindow (gszAppName,
						L"The Hello Program",
						WS_OVERLAPPEDWINDOW,
						CW_USEDEFAULT,
						CW_USEDEFAULT,
						CW_USEDEFAULT,
						CW_USEDEFAULT,
						NULL,
						NULL,
						hInstance,
						NULL);
 
	ShowWindow (hwnd, nCmdShow);
	UpdateWindow (hwnd);
 
	return TRUE;
}
 
LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC				hdc;
	PAINTSTRUCT		ps;
	RECT			rect;
	switch (message)
	{
	case WM_CREATE:
		return 0;
	case WM_PAINT:
		hdc = BeginPaint (hwnd, &ps);
		GetClientRect (hwnd, &rect);
		DrawText (hdc, L"Hello, Windows7!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
		EndPaint (hwnd, &ps);
		return 0;
 
	case WM_DESTROY:
		PostQuitMessage (0);
		return 0;
	}
 
	return DefWindowProc (hwnd, message, wParam, lParam);
}

비주얼 스튜디오 6.0에서는

되는데 2010가면 윈도우창이 생성이 안됩니다.

똑같은 코드로 돌리는데 왜안될까요.ㅠㅠ

물론 컴파일러가 많이 바뀐거 알겠지만..

지금 노트북이 윈도우 7을 쓰고있어서 스튜디오가 6.0이 안깔리는 상태에서

질문입니다.ㅠ

*지금 빌드는 성공되었고 에러가 없는상태에서

ShowWindow (hwnd, nCmdShow);
UpdateWindow (hwnd);

요부분이 안되는거 같아요ㅠ

winner의 이미지

그때는 저걸 통과시킨 이유가 있을런지 모르지만 지금으로서는 괴랄하게 보이네요.
제 computer에서는 InitInstance 함수호출을 진입하질 못합니다.
Visual Studio 2010으로 C++ build 해본 것은 처음인데 첫 build에서 구문분석하고 별 걸 다하네요. 좀 놀랬습니다.

honggogo의 이미지

일단 답글 달아주셔서 감사합니다.

일단 오류를 찾았네요

if(!RegisterMainWndClass(hInstance))
return -1;

제가 디버깅모드로 돌려보니까

여기서 프로그램이 종료되었네요.

return하고 종료되어서 이거 풀어주거나 새로 에러처리 해야될꺼같네요.ㅎ

모두 java만하면 밭은 누가갈어?? 밭갈고 싶어 C를 배운다.

winner의 이미지

같은 WNDCLASS 객체를 두번 RegisterClass를 했기 때문에 RegisterMainWndClass의 반환값을 만드는 두번째 RegisterClass 호출이 실패하게 됩니다. 따라서 조건문과 반환값에 양쪽으로 사용하고 싶다면 ATOM 객체로 초기화해서 조건문에 사용하고 난 후 반환하셔야 합니다. MessageBox 함수를 아예 RegistMainWndClass 함수호출을 하는 조건문 몸체에 넣는게 좋지 않을까라는 생각도 드네요.

RegisterClass 안의 오류메세지를 좀더 정확히 말하자면 Windows NT 계열이 요구된다고 할 수 있습니다. 그 조건처리는 RegisterClass의 실패원인이 오직 RegisterClassW 즉 UNICODE 함수에 대한 지원을 못하는 Windows(즉 Windows Me 이하의 내부 16bit API 위주의 Windows)에서 실행되었다는 것을 가정합니다. 사실 MS에서 Windows XP SP2 이하에 대한 지원을 중단했기 때문에 Windows XP가 요구된다고 해도 무방하긴 합니다.

honggogo의 이미지

오오오 감사합니다..

모두 java만하면 밭은 누가갈어?? 밭갈고 싶어 C를 배운다.

honggogo의 이미지

RegisterMainWndClass(hInstance) 여기서 0을 반환하네요.ㅠㅠ

모두 java만하면 밭은 누가갈어?? 밭갈고 싶어 C를 배운다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.