자 확장 포스트 입니다.
메뉴에 자유 곡선, 선, 원 사각형 항모을 만들고 서택한 항목에 따라 도형을 그려 보아라. 마우스가 이동할 때 선택한 도형을 그리면 된다.
ps 그려진 화면을 저장할 필요는 없으며 화면을 복구하지 않아도 상관없다 항목은 저적한 쇼트컷과 액셀러레이터를 제공해야한다.
본인은 이렇게 해결했다.
접기
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){
static int xPos,yPos,saveXpos,saveYpos;
static int selectMenu=0;
static BOOL buttonFlag=false;
TCHAR str[250];
HDC hdc;
switch(iMessage){
case WM_LBUTTONDOWN:
xPos=LOWORD(lParam);
yPos=HIWORD(lParam);
saveXpos=xPos;
saveYpos=yPos;
buttonFlag=true;
return 0;
case WM_MOUSEMOVE:
if(buttonFlag){
hdc=GetDC(hWnd);
SetROP2(hdc,R2_NOTXORPEN);
switch(selectMenu){
case LINE:
MoveToEx(hdc,xPos,yPos,NULL);
LineTo(hdc,saveXpos,saveYpos);
saveXpos=LOWORD(lParam);
saveYpos=HIWORD(lParam);
MoveToEx(hdc,xPos,yPos,NULL);
LineTo(hdc,saveXpos,saveYpos);
break;
case RECTANG:
Rectangle(hdc,xPos,yPos,saveXpos,saveYpos);
saveXpos=LOWORD(lParam);
saveYpos=HIWORD(lParam);
Rectangle(hdc,xPos,yPos,saveXpos,saveYpos);
break;
case ELLIPSE:
Ellipse(hdc,xPos,yPos,saveXpos,saveYpos);
saveXpos=LOWORD(lParam);
saveYpos=HIWORD(lParam);
Ellipse(hdc,xPos,yPos,saveXpos,saveYpos);
break;
case CLINE:
MoveToEx(hdc,xPos,yPos,NULL);
xPos=LOWORD(lParam);
yPos=HIWORD(lParam);
LineTo(hdc,xPos,yPos);
}
ReleaseDC(hWnd,hdc);
}
return 0;
case WM_LBUTTONUP:
buttonFlag=false;
hdc=GetDC(hWnd);
switch(selectMenu){
case LINE:
MoveToEx(hdc,xPos,yPos,NULL);
LineTo(hdc,saveXpos,saveYpos);
break;
case RECTANG:
Rectangle(hdc,xPos,yPos,saveXpos,saveYpos);
break;
case ELLIPSE:
Ellipse(hdc,xPos,yPos,saveXpos,saveYpos);
break;
}
ReleaseDC(hWnd,hdc);
return 0;
case WM_COMMAND:
switch(LOWORD(wParam)){
case ID_CLINE:
selectMenu=CLINE;
break;
case ID_LINE:
selectMenu=LINE;
break;
case ID_RECT:
selectMenu=RECTANG;
break;
case ID_ELLIPSE:
selectMenu=ELLIPSE;
break;
case ID_INFORMATION:
LoadString(wndnsakura,IDS_INFORMATION,str,lstrlen(str));
MessageBox(hWnd,str,TEXT("정보"),MB_OK);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
이번코드는 그렇게 머리를 쓸필요가 없는 프로그램이다 다만 노가다가 있을분.
접기