'API'에 해당되는 글 2

  1. 2009.02.04 Win API를 이용한 Treeview 컨트롤 구현
  2. 2008.12.28 1:1 채팅 프로그램 (1)

간만에 짱박혀 있던 Api를 들고 Treeview를 구현해봤당...

#include <windows.h>
#include <CommCtrl.h>
#include "resource.h"

// comctl32.lib을 포함 시켜줘야 함.


// 전역변수
HINSTANCE g_hInstance;     // Program Instance

LRESULT CALLBACK WndProc ( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam );


// 기능 : 기본 윈도우(대화창) 구성
// date : 2009. 2. 4
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int nCmdShow )
{

 // 인스턴스 핸들 초기화
 g_hInstance = hInstance;


 // Class Name And Application Name
 char szAppName[] = "TreeView";

 

 WNDCLASS wndclass;

 wndclass.style    = CS_HREDRAW | CS_VREDRAW;
 wndclass.lpfnWndProc  = WndProc;
 wndclass.cbClsExtra   = 0;
 wndclass.cbWndExtra   = 0;
 wndclass.hInstance   = hInstance;
 wndclass.hIcon    = LoadIcon ( NULL, IDI_APPLICATION );
 wndclass.hCursor   = LoadCursor ( NULL, IDC_ARROW );
 wndclass.hbrBackground  = CreateSolidBrush ( RGB ( 255, 255, 255 ) );
 wndclass.lpszMenuName  = MAKEINTRESOURCE ( NULL );
 wndclass.lpszClassName  = szAppName;

 

 // 클래스 등록
 RegisterClass ( &wndclass );

 

 

 HWND hWnd = CreateWindow (  szAppName,
  szAppName,
  WS_SYSMENU | WS_VISIBLE | WS_MINIMIZEBOX | WS_HSCROLL,
  200,    // 윈도우 좌상단 좌표
  200,
  240,    // 윈도우 크기
  380,
  NULL,
  NULL,
  hInstance,
  NULL )

 // 윈도우 화면 표시
 ShowWindow ( hWnd, nCmdShow );
 UpdateWindow ( hWnd );

 // Message Loop
 MSG msg;


 while ( GetMessage ( &msg, NULL, 0, 0) )
 {

  TranslateMessage ( &msg );
  DispatchMessage ( &msg );

 }

 return ( int ) msg.wParam;
}


HWND hTree;
HIMAGELIST Image;

// 기능 : 대화창 메세지 처리 함수
// Date : 2009. 2. 4
LRESULT CALLBACK WndProc ( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
 
 TVINSERTSTRUCT TI;
 HTREEITEM Post, Sido, Gukun;

 switch ( iMessage )
 {

  default :
   // No Function
   break;
  
  
  case WM_CREATE :
   
   // 공통 컨트롤 초기화
   InitCommonControls ();
   
   // Treeview 생성
   hTree = CreateWindow ( WC_TREEVIEW, "", WS_CHILD | WS_VISIBLE | WS_BORDER |
    TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES,
    10, 10, 200, 300, hWnd, NULL, g_hInstance, NULL );
   
   // ImageList 생성
   Image = ImageList_LoadBitmap ( g_hInstance, MAKEINTRESOURCE ( IDB_BITMAP1 ), 16, 1, RGB ( 255, 255, 255 ) );
   
   
   // 생성한 TreeView와 ImageList 연결
   SendMessage ( hTree, TVM_SETIMAGELIST, ( WPARAM ) TVSIL_NORMAL, ( LPARAM ) Image );

   
   // 항목 삽입
   TI.hParent     = 0;
   TI.hInsertAfter    = TVI_LAST;
   TI.item.mask    = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
   TI.item.iImage    = 0;
   TI.item.iSelectedImage  = 4;
   TI.item.pszText    = "우편번호부";
   
   Post = ( HTREEITEM ) SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );
   
   
   TI.hParent     = Post;
   TI.item.iImage    = 1;
   TI.item.iSelectedImage  = 5;
   TI.item.pszText    = "서울시";

   Sido = ( HTREEITEM ) SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );

   
   TI.hParent     = Sido;
   TI.item.iImage    = 2;
   TI.item.iSelectedImage  = 6;
   TI.item.pszText    = "동대문구";
   
   Gukun = ( HTREEITEM ) SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );
 
   
   TI.hParent     = Gukun;
   TI.item.iImage    = 3;
   TI.item.iSelectedImage  = 7;
   TI.item.pszText    = "이문동 : 130-080";

   SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );

   
   TI.item.pszText    = "휘경동 : 130-090";

   SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );

   
   TI.item.pszText    = "회기동 : 130-050";

   SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );

   

   // 항목 삽입
   TI.hParent     = 0;
   TI.hInsertAfter    = TVI_LAST;
   TI.item.mask    = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
   TI.item.iImage    = 0;
   TI.item.iSelectedImage  = 4;
   TI.item.pszText    = "최상위 두번째";
   

   SendMessage ( hTree, TVM_INSERTITEM, 0, ( LPARAM ) ( LPTV_INSERTSTRUCT ) &TI );

   break;


  case WM_DESTROY :
   
   ImageList_Destroy ( Image );    // Image List 소멸

   PostQuitMessage ( 0 );

   break;

 }


 return DefWindowProc ( hWnd, iMessage, wParam, lParam );

}

댓글을 달아 주세요

TCP/IP 소켓 프로그래밍 | Posted by Mr.Yong 2008. 12. 28. 12:59

1:1 채팅 프로그램

소리바다에서 한게임까지 TCP/IP 소켓 프로그래밍 참고해서 작성

잘 동작함...이거 작성한지도 한참 됐넹.........

코딩을 발로 한것 같음...

하지만 처음 WINAPI+SOCKET 하는 사람에겐 참 좋은 예제임...

파일 전송과 엔터키 처리는 안했음..(귀차니즘으로........)

 

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 2009.04.05 19:27

    비밀댓글입니다