나는 WndProc 이 메인윈도우에만 있는 줄 알았다. (-_-)

지금 하는 일 중 하나가 Static 윈도우를 자식창(WS_CHILD)으로 만들고 그 안에 브라우저를 박아넣는건데,
이제껏 통신방식을 파일, 클립보드, 파이프 등을 이용해서 했지만 썩 만족스럽지 못했다.
메시지를 보내는 게 제일 좋다고 생각하고 삽질하다 성공했다.

우선 선언을 몇개 한다.

 

// 주고 받을 메시지 정의 
#define WM_PROXY WM_USER+123   

// 전역으로 쓸 프로시져 
WNDPROC IEProcdure;

 

  

Callback 함수 선언

LRESULT CALLBACK IEProc(HWND hWnd, UINT iMsg, WPARAM wParam, LPARAM lParam) 
{
   
switch(iMsg) 
    {
        case WM_PROXY:
            // 그냥 메시지가 오면 wParam 에 따라 메세지박스를 띄워준다... 
           
if (wParam==0) MessageBox(hWnd, "0", "MyProxy", MB_OK); 
           
else           MessageBox(hWnd, "0 아니다", "MyProxy", MB_OK); 
           
break
   
  
   
return CallWindowProc(IEProcedure, hWnd, iMsg, wParam, lParam);

 

 

 

static window 생성

HWND g_hChild; // 생성할 정적 윈도우 핸들

// 윈도우 생성 
g_hChild=CreateWindow("static"// 윈도우 클래스 = 정적(=static)
                      "Proxy"// 윈도우 캡션
                      WS_POPUP | WS_VISIBLE | WS_CHILD, // 윈도우 성격(-_-); 
                      0, 0,  // X, Y 위치
                      450, 600, // W, H 크기
                      hWnd,  // 부모윈도우 핸들 (hWnd 라고 가정)
                      (HMENU)0, // 메뉴 (없다)
                      (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),  // 인스턴스 (type cast 에서 warning 뜸. 하지만 기능에는 지장없으므로 쫄지마셈)
                      (LPVOID)NULL);
  
// WndProc 과 연결 
IEProcedure=(WNDPROC)SetWindowLong(g_hchild, GWL_WNDPROC, (LONG)IEProc); 

 

 

끝이다..-_-;

졸라 간단한 거지만 개념이 안잡혀 있을 당시에는 가능한지도 몰랐었다...


'WindowsAPI' 카테고리의 다른 글

[Windows] cmd.exe 커맨드라인 문자열 길이 제한 (commandline, string, limit)  (0) 2014.07.15
ComboBox 메세지 몇개  (0) 2010.06.09
Win32API 주요 함수들  (1) 2009.04.12
Windows Message List  (0) 2009.04.12
Win32 Error Codes  (0) 2009.04.12
Posted by bloodguy
,