'Programming/WPF, WIN32API, MFC'에 해당되는 글 3건

  1. 2019.04.05 WPF 네아로 다검색 프로그램
  2. 2008.12.16 Win32 윈도우 메시지맵
  3. 2008.10.01 비트맵 출력 (사이즈 상관없음)

WPF 네아로 구현.

 

 

1. 소스코드

 - 본 소스코드를 기반으로 수정하여 사용 하시기 바랍니다.

 - VS2017로 생성된 프로젝트 입니다.

WPF_Naver_OAuth.zip
7.90MB

 

2. 개발자용

 - 본인의 어플리케이션이 네이버에 정상적으로 등록되었는지 테스트 용 입니다.

 - 네이버 개발자 센터 > 내 어플리케이션 메뉴에서 Client ID, Client Secret, Callback URL을 입력후 정상적으로 사용자의 프로필을 가져오는지 확인 할 수 있습니다.

 

다검색_개발자용.zip
0.55MB

3. 사용자용

 - "다검색"으로 등록된 어플리케이션으로 네아로를 이용 할 수 있습니다. 

 - WPF 응용프로그램에서 어떠한 방식으로 네아로를 사용 할 수 있는지 확인 할 수 있습니다.

다검색_사용자용.zip
0.55MB

 

Posted by 시긔양
/**********************************************************
*     main.h
**********************************************************/



#define dim(x) (sizeof(x) / sizeof(x[0]))       // 배열 원소가 몇개인지 반환

//---------------------------------------------------- 데이터 타입 정의 시작

/* 메시지와 함수를 대응시키는 구조체 */
struct decodeUINT
{                         
  UINT Code;                              
  LRESULT (*Fxn)(HWND, UINT, WPARAM, LPARAM);
}; 

/* 메뉴 ID와 함수를 대응시키는 구조체 */
struct decodeCMD
{                            
  UINT Code;                                
  LRESULT (*Fxn)(HWND, WORD, HWND, WORD);   
};
//---------------------------------------------------- 데이터 타입 정의 끝



//---------------------------------------------------- 함수 선언 시작

HWND InitInstance (HINSTANCE, LPWSTR, int);
int TermInstance (HINSTANCE, int);

/* 윈도우 프로시저 */
LRESULT CALLBACK MainWndProc (HWND, UINT, WPARAM, LPARAM);

/* 메시지 핸들러 */
LRESULT DoPaintMain (HWND, UINT, WPARAM, LPARAM);
LRESULT DoDestroyMain (HWND, UINT, WPARAM, LPARAM);



//---------------------------------------------------- 함수 선언 끝




                                                                


/**********************************************************
*    main.cpp
**********************************************************/


#include <windows.h>
#include "main.h"


//---------------------------------------------------- 전역 데이터 정의 시작

const TCHAR szAppName[] = TEXT("HelloCE");        // 윈도우 클래스 이름
HINSTANCE hInst;                    // 프로그램 인스턴스 핸들

/* MainWindowProc를 위한 메시지 분배 테이블 */
const struct decodeUINT MainMessages[] = {
                      WM_PAINT, DoPaintMain,
                      WM_DESTROY, DoDestroyMain,
                     };


//---------------------------------------------------- 전역 데이터 정의 끝



//##################################################### 프로그램 시작점
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) 
{
  MSG msg;
  int rc = 0;
  HWND hwndMain;

  /* 인스턴스 초기화 */
  hwndMain = InitInstance (hInstance, lpCmdLine, nCmdShow);
  if (hwndMain == 0return 0x10;

  /* 메시지 루프 */
  while (GetMessage (&msg, NULL, 00)) {
    TranslateMessage (&msg);
    DispatchMessage (&msg);
  }
  /* 인스턴스 소거 */
  return TermInstance (hInstance, msg.wParam);
}






//---------------------------------------------------- InitInstance - 인스턴스 초기화
HWND InitInstance (HINSTANCE hInstance, LPWSTR lpCmdLine, int nCmdShow) 
{
  WNDCLASS wc;
  HWND hWnd;

  /* 전역 변수에 프로그램 인스턴스 핸들 보관 */
  hInst = hInstance;


  /* 주 윈도우 클래스 등록 */
  wc.style      = 0;                    // 윈도우 스타일
  wc.lpfnWndProc    = MainWndProc;                // 콜백 함수 
  wc.cbClsExtra    = 0;                    // 추가 클래스 데이터
  wc.cbWndExtra    = 0;                    // 추가 윈도우 데이터
  wc.hInstance    = hInstance;                // 소유자 핸들
  wc.hIcon      = NULL,                    // 아이콘
  wc.hCursor      = LoadCursor (NULL, IDC_ARROW);        // 디폴트 커서
  wc.hbrBackground  = (HBRUSH) GetStockObject (WHITE_BRUSH);  // 배경색
  wc.lpszMenuName    = NULL;                    // 메뉴이름 
  wc.lpszClassName  = szAppName;                // 윈도우 클래스 이름

  if (RegisterClass (&wc) == 0return 0;

  /* 주 윈도우 생성 */
  hWnd = CreateWindow (szAppName,                  // 윈도우 클래스
            TEXT("HelloCE"),              // 윈도우 창제목
            WS_VISIBLE | WS_CAPTION | WS_SYSMENU,    // 윈도우 스타일
            CW_USEDEFAULT,                // 시작 x좌표
            CW_USEDEFAULT,                // 시작 y좌표
            CW_USEDEFAULT,                // 최초 너비
            CW_USEDEFAULT,                // 최초 높이
            NULL,                    // 부모윈도우
            NULL,                    // 메뉴(NULL)
            hInstance,                  // 프로그램 인스턴스
            NULL);                    // 생성 매개변수 포인터

  if (!IsWindow (hWnd)) return 0;  

  /* 표준적인 윈도우 표시/갱신 */
  ShowWindow (hWnd, nCmdShow);
  UpdateWindow (hWnd);
  return hWnd;
}












//---------------------------------------------------- Terminstance - 프로그램 소거
int TermInstance (HINSTANCE hInstance, int nDefRC) 
{
  return nDefRC;
}




//##################################################### 주 윈도우를 위한 메시지 처리 프로시저

//---------------------------------------------------- MainWndProc - 주 윈도우의 콜백 함수
LRESULT CALLBACK MainWndProc (HWND hWnd, UINT wMsg, WPARAM wParam,  LPARAM lParam) 
{
  INT i;

  /* 메시지 목록을 검사하여 목록에 있는 메시지라면 해당 프로시저 호출 */
  for (i = 0; i < dim(MainMessages); i++) 
  {
    if (wMsg == MainMessages[i].Code)
      return (*MainMessages[i].Fxn)(hWnd, wMsg, wParam, lParam);
  }
  return DefWindowProc (hWnd, wMsg, wParam, lParam);
}





//##################################################### 메시지 처리 프로시저's

LRESULT DoPaintMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) 
{
  PAINTSTRUCT ps;
  RECT rect;
  HDC hdc;

  // Get the size of the client rectangle
  GetClientRect (hWnd, &rect);

  hdc = BeginPaint (hWnd, &ps); 
  Rectangle(hdc, 1010200200);
  EndPaint (hWnd, &ps); 
  return 0;
}




//##################################################### 창 파괴 메시지

//---------------------------------------------------- DoPaintMain - WM_PAINT메시지 처리
LRESULT DoDestroyMain (HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam) 
{
  PostQuitMessage (0);
  return 0;



Posted by 시긔양
#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hlnst;

LPCTSTR lpszClass=TEXT("First");


char buf[50000];
BITMAPFILEHEADER Fihd;
BITMAPINFOHEADER Imhd;


int APIENTRY WinMain(HINSTANCE hlnstance,HINSTANCE hPrevlnstance,LPSTR lpszCmdParam,int nCmdShow)
{
  HWND hWnd;
  MSG Message;
  WNDCLASS WndClass;
  g_hlnst=hlnstance;

  WndClass.cbClsExtra=0;
  WndClass.cbWndExtra=0;
  WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);

  WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
  WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
  WndClass.hInstance=hlnstance;
  WndClass.lpfnWndProc=WndProc;
  WndClass.lpszClassName=lpszClass;
  WndClass.lpszMenuName=NULL;
  WndClass.style=CS_HREDRAW|CS_VREDRAW;
  RegisterClass(&WndClass);

  hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,300,300,NULL,(HMENU)NULL,hlnstance,NULL);
  ShowWindow(hWnd,nCmdShow);

  while(GetMessage(&Message,NULL,0,0))
  {
    TranslateMessage(&Message);
    DispatchMessage(&Message);
  }

  return (int)Message.wParam;
}


LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
  HDC hdc;
  PAINTSTRUCT ps;
  HANDLE hFile;
  DWORD dwRead;
  RECT rt;

  TCHAR kk[100];
 
  int iCntX;
  int iCntY;


  int Jump;

 



  switch(iMessage)
  {
  case WM_SIZE:
    hFile=CreateFile(TEXT("test1.bmp"), GENERIC_READ, 0, NULL, OPEN_EXISTING , FILE_ATTRIBUTE_NORMAL, NULL);

    if(hFile != INVALID_HANDLE_VALUE)
    {
      ReadFile(hFile, buf, 50000, &dwRead, NULL);
      memcpy(&Fihd, &buf[0], sizeof(Fihd));
      memcpy(&Imhd, &buf[14], sizeof(Imhd));
      CloseHandle(hFile);
      InvalidateRect(hWnd,NULL,TRUE);


      //wsprintf(kk,TEXT("%c%c"),buf[0],buf[1]);
      wsprintf(kk,TEXT("가로 - %d , 세로 - %d"),Imhd.biWidth, Imhd.biHeight);

 
      SetWindowText(hWnd, kk);
     
    }
    else
    {
     
      SetWindowText(hWnd,TEXT("File Open 실패") );  
    }
    return 0;


  case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    GetClientRect(hWnd, &rt);


// 핵심부분
    Jump=0x36
;    

   
for(iCntY= 0; iCntY <
 Imhd.biHeight ; ++iCntY)
    {       
     
for(iCntX=0; iCntX  <
 Imhd.biWidth  ; ++iCntX )
      {
        SetPixel(hdc,iCntX, Imhd.biHeight-iCntY,RGB(buf[Jump+
2], buf[Jump+1], buf[Jump+0
]));
        Jump+
=3
;
         
      } 
      
if(iCntX % 4 !=0
)
       {
        Jump+
=iCntX%4
;

      }
     
    }


     
    EndPaint(hWnd, &ps);
    return 0;


  case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
  }
  return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
Posted by 시긔양
TAG API, bitmap, bmp