본문 바로가기
IT창고/API

SendMessage예제

by 창구창고 2007. 1. 22.

📑 목차

    반응형
    // PostMessage.cpp : Defines the entry point for the console application. 
    //  
    #include<windows.h> 
    #include<stdio.h>  
    #define WM_ADD
    WM_APP+100
    int main() {
    	char * FName="B"; 	
        HWND hwnd	=	FindWindow(0, FName);  	
        if(hwnd == 0 ) 	{ 		
        	printf("%s를 먼저 실행해 주세요\n",FName); 		
            return 0; 	
        }
        //----------------------------------------------
        int sum=0;
        sum=SendMessage(hwnd, WM_ADD, 10, 20);
        printf("전송완료 : %d\n",sum); 	
        return 0; 
    }
    #include<windows.h>
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); 
    HINSTANCE g_hinst; LPCTSTR lpszClass=TEXT("TextOut");  
    
    #define WM_ADD	WM_APP+100  
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) {
    	MSG Message; 	//1. 위도우 클래스 만들기 (10가지를 다 정확히 입력하지 않으면 화면이 뜨지 않는다.) 	
        WNDCLASS wc;		//미리정의된 10개 항목을 채우는 클래스 (WNDCLASSEX 12개 항목 10개 항목에 작은 아이콘, 구조체 크기를 포함한다.) 	
        wc.cbClsExtra = 0; 	
        wc.cbWndExtra = 0; 	
        wc.hbrBackground	=	(HBRUSH)GetStockObject(	WHITE_BRUSH);  	
        wc.hCursor		=	LoadCursor	(	0, IDC_CROSS); 	
        wc.hIcon		=	LoadIcon	(	0, IDI_WINLOGO	); 	
        wc.hInstance	=	hInstance; 	
        wc.lpfnWndProc	=	WndProc;	//<~ 이부분을 자신이 만드는 함수로 바꿔줘야 한다.	메시지 함수등록 	
        wc.lpszClassName=	TEXT("First"); 	
        wc.lpszMenuName	=	0; 	
        wc.style		=	0;  	//2. 윈도우 클래스 등록하기. 	
        RegisterClass( & wc	);	// 등록을 하는 함수도 2가지가 있다. RegisterClass와 RegisterClassEx가 있다. 	
        //WNDCLASS로 만들었으면 RegisterClass로 등록하고 WNDCLASSEX로 만들었으면 RegisterClassEx로 등록  	
        //3. 등록된 클래스를 사용해서 윈도우 만들기. 	
        // 
        typedef long HWND;	//	윈도우의 번호를 담을때 사용 
        HWND hwnd	=	CreateWindowEx(0 , // 확장 윈도우 스타일
        							TEXT("First"),				// 윈도우 클래스 이름
                                    TEXT("B"),					// 창이름
                                    WS_OVERLAPPEDWINDOW,	// 기본 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);  	
        while(GetMessage(&Message,0,0,0))	//메시지 큐에 가서 메시지를 꺼내오고 가져온 메시지를 윈도우 클래스에 등록된 메세지 처리함수로 전달한다. 
        {
        	TranslateMessage(&Message);
    	    DispatchMessage(&Message);//가져온 메시지를 윈도우 클래스에 등록된 메시지 처리함수로 전달한다.
        } 
        MessageBox(0, "이제 알겠죠?","물음",MB_OKCANCEL);//종료되지 않게 하기 위해 	
        return 0;
    } /* 1. 메세지 함수모양 2. 메세지 루프의 모양 3. 종료후 조건(WM_QUIT 이 Q에 들오얼때) */ 
    LRESULT CALLBACK WndProc(HWND hwnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { 	
    	HDC hdc; 	
        PAINTSTRUCT ps;  	
        switch(iMessage){ 	
        	case WM_DESTROY: 		
            	PostQuitMessage(0); 		
                return 0 ; 	
            case WM_LBUTTONDOWN: 		
            	hdc=GetDC(hwnd); 		
            	TextOut(hdc,100,100,TEXT("Beautiful Korea"),15); 		
                ReleaseDC(hwnd,hdc); 		
                return 0; 	
            case WM_PAINT: 		
            	hdc=BeginPaint(hwnd,&ps); 		
                TextOut(hdc,100,100,TEXT("Beautiful Korea"),15); 		
                EndPaint(hwnd,&ps); 		
                return 0; 	
            case WM_ADD: 	
            { 			
            	char s[256]; 			
                wsprintf(s, "WM_ADD도착 : %d %d",wParam,lParam); 			
                MessageBox(0,s,"",MB_OKCANCEL); 			
                return wParam + lParam; 		
             } 	
        } 	//꺼내온 메시지를 처리하지 않은경우 -> 바드시 아래 함수를 처리한다. 	
        return(DefWindowProc(hwnd,iMessage,wParam,lParam)); }
    반응형

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