본문 바로가기
IT창고/API

자석 효과

by 창구창고 2007. 1. 22.

📑 목차

    반응형
    //--------------------------------------------------
    #define _WIN32_WINNT	0x0501//
    #define WINVER			0x0501//
    //--------------------------------------------------
    
    #include<windows.h>
    #include<stdio.h>
    
    
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance,
    				   HINSTANCE hPrev,
    				   LPSTR lpCmdLine,
    				   int nShowCmd)
    {
    	AllocConsole();	//	콘솔창 생성
    
    	freopen("CONOUT$",	//콘솔을
    		"wt",			//text write모드로
    		stdout);		//stdoutrhk 연결
    	//1. 위도우 클래스 만들기 (10가지를 다 정확히 입력하지 않으면 화면이 뜨지 않는다.)
    	WNDCLASS wc;		//미리정의된 10개 항목을 채우는 클래스 (WNDCLASSEX 12개 항목 10개 항목에 작은 아이콘, 구조체 크기를 포함한다.)
    
    	MSG Message;
    
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hbrBackground	=	(HBRUSH)GetStockObject(	LTGRAY_BRUSH);
    
    	wc.hCursor		=	LoadCursor	(	0, IDC_CROSS);
    	wc.hIcon		=	LoadIcon	(	0, IDI_WINLOGO	);
    	wc.hInstance	=	hInstance;
    	wc.lpfnWndProc	=	WndProc;
    	wc.lpszClassName=	"First";
    	wc.lpszMenuName	=	0;
    	wc.style		=	0;
    
    	//2. 윈도우 클래스 등록하기.
    	RegisterClass( & wc	);	// 등록을 하는 함수도 2가지가 있다. RegisterClass와 RegisterClassEx가 있다.
    	//WNDCLASS로 만들었으면 RegisterClass로 등록하고 WNDCLASSEX로 만들었으면 RegisterClassEx로 등록
    
    	//3. 등록된 클래스를 사용해서 윈도우 만들기.
    	// typedef long HWND;	//	윈도우의 번호를 담을때 사용
    	HWND hwnd	=	CreateWindowEx(WS_EX_RIGHT ,			// 확장 윈도우 스타일
    									"First",				// 윈도우 클래스 이름
    									"안녕",					// 창이름
    									WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMIZE ,	// 기본 Window Styles : & ~ 연산으로 기존스타일 제거하기
    															// WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX
    									CW_USEDEFAULT,	0,	CW_USEDEFAULT,	0,	// X,Y,W,H
    									0,						// 부모 윈도우 핸들( 번호 )
    									0,						// 메뉴 핸들( 번호 )
    									hInstance,				// 인스턴스 핸들
    									0);						// 생성인자.( MDI 만들때 사용 )
    	//							   
    
    	//CreateWindowEx는 CreateWindow가 가지는 11개에 확장 윈도우 스타일 1가지 인자를 더 가져서 12가지 인자를 가진다.
    
    	//4. 윈도우 보여주기
    	ShowWindow(hwnd, nShowCmd);		//	화면 전체 무효화 - WM_PAINT 발생
    	UpdateWindow(hwnd);				//	WM_PAINT 를 즉시 처리
    									//	 반응 속도가 빠른것처럼 보이게 한다.
    
    
    	while(GetMessage(&Message,0,0,0))	//메시지 큐에 가서 메시지를 꺼내오고 가져온 메시지를 윈도우 클래스에 등록된 메세지 처리함수로 전달한다.
    	{
    		TranslateMessage(&Message);
    		DispatchMessage(&Message);//가져온 메시지를 윈도우 클래스에 등록된 메시지 처리함수로 전달한다.
    	}
    	
    	MessageBox(0, "알겠나요?","물음",MB_OKCANCEL);//종료되지 않게 하기 위해
    	return 0;
    }
    LRESULT CALLBACK WndProc(HWND hwnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
    {
    	RECT rc ;
    	GetClientRect(hwnd,&rc);
    
    	switch(iMessage){
    
    		//화면에 항상 hello라는 메시지를 보여 주고 싶다. - 어디서 출력?
    		//- WM_PAINT에서 출력
    	case WM_DESTROY:
    		PostQuitMessage(0);
    		return 0 ;
    //자석 효과이다.
    	case WM_WINDOWPOSCHANGING:
    		{
    			LPWINDOWPOS p = (LPWINDOWPOS)lParam;
    
    			// 이동할곳의 좌표와 크기가 lParam에 들어있다.
    			if(p->x < 10)	p->x = 0;
    			if(p->y < 10)	p->y = 0;
    		}
    		return 0;
    	//case WM_PAINT:
    	
    
    	}
    	//꺼내온 메시지를 처리하지 않은경우 -> 바드시 아래 함수를 처리한다.
    	return(DefWindowProc(hwnd,iMessage,wParam,lParam));
    }
    //		
    반응형

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."