WIN322010. 2. 5. 20:18
■ 문자열 출력 - 2

#include <windows.h>
#include <tchar.h>
#include <stdio.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
 HDC hDc;
 // *
 // 지정된 문자열을 출력하기위해 static변수가 필요하다
 // WndProc은 이벤트 관리 콜백 함수로서 윈도우에 의해 호출이 되어진다.
 // static으로 선언을 안할경우 새로운 가비지 값이 들어가기 때문이다.
 static TCHAR tcaStr[256];
 
 PAINTSTRUCT ps;
 
 switch(Msg) {
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_LBUTTONUP:
  _tcscpy(tcaStr, _T("마누라 사랑해~ 알지~?"));
  InvalidateRect(hWnd, NULL, TRUE);
  return 0;
 case WM_PAINT:
  hDc = BeginPaint(hWnd, &ps);
  TextOut(hDc, 10, 10, tcaStr, lstrlen(tcaStr));
  EndPaint(hWnd, &ps);
  return 0;
 }
 
 return DefWindowProc(hWnd, Msg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstacne, LPSTR lpCmdLine, int nCmdShow)
{
 HWND hWnd;
 WNDCLASS wc;
 MSG msg;
 
 wc.style   = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc  = WndProc;
 wc.cbClsExtra  = wc.cbWndExtra = 0;
 wc.hInstance  = hInstance;
 wc.hIcon   = LoadIcon(NULL , IDI_APPLICATION);
 wc.hCursor   = LoadCursor(NULL , IDC_ARROW);
 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszMenuName  = NULL;
 wc.lpszClassName = _T("MyWindow");

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

 hWnd = CreateWindow(
   _T("MyWindow"), _T("This is Test") ,
   WS_OVERLAPPEDWINDOW  | WS_VISIBLE ,
   100, 100,
   200, 200,
   NULL , NULL ,
   hInstance , NULL
 );

 if (hWnd == NULL) return 0;

 while (GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
 return msg.wParam;
}  



'WIN32' 카테고리의 다른 글

[WIN32] 12. 사각형 그리기  (0) 2010.02.09
[Win32] 11. 라인출력  (0) 2010.02.08
[Win32] 9. 문자열 출력 - 1  (0) 2010.02.04
[Win32] 8. 윈도우 생성/거부  (0) 2010.02.04
[Win32] 7. 종료처리 순서  (0) 2010.02.04
Posted by 내일도행복
WIN322010. 2. 4. 18:40
■ 문자열 출력

#include <windows.h>

#include <tchar.h>
#include <stdlib.h>

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
 HDC hdc;
 TCHAR *tcaStr = _T("This is TEST");
  
 switch(msg) {
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_LBUTTONUP:
  hdc = GetDC(hWnd);
  TextOut(hdc, 10, 10, tcaStr, _tcslen(tcaStr));
  ReleaseDC(hWnd, hdc);
  return 0;
 }

 // 必ず、呼び出す
 return DefWindowProc(hWnd, msg, wp, lp);
}

int WINAPI WinMain(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nCmdShow ) {

 HWND hWnd;
 MSG msg;
 WNDCLASS wc;
 
 wc.style   = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc  = WndProc;
 wc.cbClsExtra  = wc.cbWndExtra = 0;
 wc.hInstance  = hInstance;
 wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION);
 wc.hCursor   = LoadCursor(NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszMenuName  = NULL;
 wc.lpszClassName = _T("MyWindow");
 
 if (!RegisterClass(&wc)) return 0;
 
 hWnd = CreateWindow(
    _T("MyWindow"),
    wc.lpszClassName,
    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    100, //CW_USEDEFAULT
    100, //CW_USEDEFAULT
    200, //CW_USEDEFAULT
    200, //CW_USEDEFAULT
    NULL,
    NULL,
    hInstance,
    NULL
 );
 
 if (hWnd == NULL) return 0;
 
 while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); 
 
 // 必ず、WS_QUITのwParam値を投げる
 return msg.wParam;
}



'WIN32' 카테고리의 다른 글

[Win32] 11. 라인출력  (0) 2010.02.08
[Win32] 10. 문자열 출력 - 2  (0) 2010.02.05
[Win32] 8. 윈도우 생성/거부  (0) 2010.02.04
[Win32] 7. 종료처리 순서  (0) 2010.02.04
[Win32] 6. 종료처리  (0) 2010.02.04
Posted by 내일도행복
WIN322010. 2. 4. 18:24

■ 윈도우 생성거부 기능

#include <windows.h>

#include <tchar.h>
#include <stdlib.h>


LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
 /*
  //メッセージをメッセージキューにポストしないで直接にWindowProcedure
  //に送る。
  typedef struct tagCREATESTRUCT {
     LPVOID    lpCreateParams;
     HANDLE    hInstance;
     HMENU     hMenu;
     HWND      hwndParent;
     int       cy;
     int       cx;
     int       y;
     int       x;
     LONG      style;
     LPCSTR    lpszName;
     LPCSTR    lpszClass;
     DWORD     dwExStyle;
  } CREATESTRUCT;
 */

 int nYesNo;
 LPCREATESTRUCT lpcsWnd;
 
 switch(msg) {
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_CREATE:
  // **
  // LPARAMにCREATESTRUCT構造体のポインタがある
  lpcsWnd = (LPCREATESTRUCT) lp;
  nYesNo = MessageBox(hWnd, _T("Do you want create Window?"), _T(lpcsWnd->lpszName), MB_YESNO | MB_ICONINFORMATION);
  
  // *
  // Windowを生成制御
  // 0を渡すとWindow生成
  if (nYesNo == IDYES) return 0;
  // 生成しない場合は -1
  else return -1; // CreateWindow()はNULLと同じ意味
 }

 // 必ず、呼び出す
 return DefWindowProc(hWnd, msg, wp, lp);
}

int WINAPI WinMain(
   HINSTANCE hInstance,
   HINSTANCE hPrevInstance,
   LPSTR lpCmdLine,
   int nCmdShow ) {

 HWND hWnd;
 MSG msg;
 WNDCLASS wc;
 
 wc.style   = CS_HREDRAW | CS_VREDRAW;
 wc.lpfnWndProc  = WndProc;
 wc.cbClsExtra  = wc.cbWndExtra = 0;
 wc.hInstance  = hInstance;
 wc.hIcon   = LoadIcon(NULL, IDI_APPLICATION);
 wc.hCursor   = LoadCursor(NULL, IDC_ARROW);
 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 wc.lpszMenuName  = NULL;
 wc.lpszClassName = _T("MyWindow");
 
 if (!RegisterClass(&wc)) return 0;
 
 hWnd = CreateWindow(
    _T("MyWindow"),
    wc.lpszClassName,
    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    100,
    100,
    200,
    200,
    NULL,
    NULL,
    hInstance,
    NULL
 );
 
 if (hWnd == NULL) return 0;
 
 while (GetMessage(&msg, NULL, 0, 0)) DispatchMessage(&msg); 
 
 // 必ず、WS_QUITのwParam値を投げる
 return msg.wParam;
}


'WIN32' 카테고리의 다른 글

[Win32] 10. 문자열 출력 - 2  (0) 2010.02.05
[Win32] 9. 문자열 출력 - 1  (0) 2010.02.04
[Win32] 7. 종료처리 순서  (0) 2010.02.04
[Win32] 6. 종료처리  (0) 2010.02.04
[Win32] 5. 윈도우 프로시저  (0) 2010.02.04
Posted by 내일도행복