Hisworld.tistory.com
The hisWorld
(140)
hisworld_new
(0)
hisOld
(138)
Android
(7)
Computer Vision
(18)
JAVA
(4)
C/C++
(26)
열혈강의 C
(32)
TCP/IP socket
(12)
WinAPI
(16)
System Programming
(0)
etc
(23)
Plan
(0)
hisWorld
(0)
hiStory
(0)
hiStudy
(0)
hiSnap
(0)
홈
태그
미디어로그
위치로그
방명록
Windows Live Messenger
winapi
Join C
대학생 공모전
The Turing test page
훈스닷넷
C/C++ Reference
WIKI
/
/
블로그 내 검색
ropmode2
RopMode2
2009.01.06
RopMode2
URUZ-7
2009. 1. 6. 07:41
2009. 1. 6. 07:41
/*=============================================== Program Title : RopMode2 Name : siro-y Date : 2009/01/06 Version : 1.0 E-Mail : ms08th@hotmail.com ===============================================*/ #include
#include "resource.h" LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; HWND hWndMain; LPCTSTR lpszClass=TEXT("RopMode"); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hInst=hInstance; HACCEL hAccel; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1); WndClass.hCursor=LoadCursor(g_hInst,MAKEINTRESOURCE(IDC_CURSOR1)); //아이콘 WndClass.hIcon=LoadIcon(g_hInst,MAKEINTRESOURCE(IDI_ICON1)); //커서 WndClass.hInstance=hInstance; WndClass.lpfnWndProc=WndProc; WndClass.lpszClassName=lpszClass; WndClass.lpszMenuName=MAKEINTRESOURCE(IDR_MENU1); //메뉴 WndClass.style=CS_HREDRAW|CS_VREDRAW; RegisterClass(&WndClass); hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL); ShowWindow(hWnd,nCmdShow); //Accelerator사용 hAccel=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1)); while(GetMessage(&Message,NULL,0,0)) { if(!TranslateAccelerator(hWnd,hAccel,&Message))//필터링 { TranslateMessage(&Message); DispatchMessage(&Message); } } return (int)Message.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; enum mode {NONE,CURVE,LINE,CIRCLE,RECTANGLE,CLEAR};//그리기 모드 HPEN MyPen, OldPen; HBRUSH OldBrush; static int sx,sy,oldx,oldy; static BOOL bNowDraw = FALSE; static char myMode = NONE; switch(iMessage) { //메뉴 선택 case WM_COMMAND: switch(LOWORD(wParam)) { case ID_NEW_CIRCLE: myMode = CIRCLE; SetWindowText(hWnd,TEXT("원 그리기")); break; case ID_NEW_LINE: myMode = LINE; SetWindowText(hWnd,TEXT("선 그리기")); break; case ID_NEW_RECTANGLE: myMode = RECTANGLE; SetWindowText(hWnd,TEXT("사각형 그리기")); break; case ID_NEW_CURVE: myMode = CURVE; SetWindowText(hWnd,TEXT("곡선 그리기")); break; case ID_NEW_CLEAR: //clear if(myMode!=NONE) { InvalidateRect(hWnd,NULL,TRUE); MessageBox(hWnd,TEXT("깨끗하죠?"),TEXT("알림"),NULL); myMode=NONE; bNowDraw=FALSE; } else { MessageBox(hWnd,TEXT("아무것도 없어요"),TEXT("알림"),NULL); } break; } return 0; //마우스 클릭 case WM_LBUTTONDOWN: if(myMode!=NONE) if(!bNowDraw) { sx=LOWORD(lParam); sy=HIWORD(lParam); oldx=sx; oldy=sy; bNowDraw=TRUE; } if(myMode==NONE) { MessageBeep(MB_ICONEXCLAMATION); MessageBox(hWnd,TEXT("그리기 모드 선택하세요"),TEXT("알림"),MB_OK); } return 0; //마우스 이동 case WM_MOUSEMOVE: if(bNowDraw) //왼쪽버튼을 누른 상태 { hdc=GetDC(hWnd); if(myMode!=NONE) { switch(myMode) { case CURVE://자유곡선 { SetROP2(hdc,R2_NOT); MoveToEx(hdc,sx,sy,NULL); sx=LOWORD(lParam); sy=HIWORD(lParam); LineTo(hdc,sx,sy); return 0; } case CIRCLE://타원 { SetROP2(hdc,R2_NOT); SelectObject(hdc,OldBrush=(HBRUSH)GetStockObject(NULL_BRUSH)); Ellipse(hdc,sx,sy,oldx,oldy); oldx=LOWORD(lParam); oldy=HIWORD(lParam); Ellipse(hdc,sx,sy,oldx,oldy); DeleteObject(SelectObject(hdc,OldBrush)); return 0; } case LINE://직선 { SetROP2(hdc,R2_NOT); MoveToEx(hdc,sx,sy,NULL); LineTo(hdc,oldx,oldy); oldx=LOWORD(lParam); oldy=HIWORD(lParam); MoveToEx(hdc,sx,sy,NULL); LineTo(hdc,oldx,oldy); return 0; } case RECTANGLE://사각형 { OldPen=(HPEN)SelectObject(hdc,MyPen=CreatePen(PS_DASHDOT,1,RGB(0,0,0))); SetROP2(hdc,R2_NOT); SelectObject(hdc,OldBrush=(HBRUSH)GetStockObject(NULL_BRUSH)); Rectangle(hdc,sx,sy,oldx,oldy); oldx=LOWORD(lParam); oldy=HIWORD(lParam); Rectangle(hdc,sx,sy,oldx,oldy); DeleteObject(SelectObject(hdc,OldPen)); DeleteObject(SelectObject(hdc,OldBrush)); return 0; } } } ReleaseDC(hWnd,hdc); } return 0; case WM_LBUTTONUP: if(myMode!=NONE) if(bNowDraw) bNowDraw=FALSE; return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); }
공유하기
게시글 관리
Hisworld.tistory.com
PREV
이전
1
NEXT
다음
+ Recent posts
Powered by
Tistory
, Designed by
wallel
Rss Feed
and
Twitter
,
Facebook
,
Youtube
,
Google+
티스토리툴바