TODAY : / TOTAL :

120626_API :: Old Object

  • Share this:
반응형

 void TestResource(BOOL bUnSel,BOOL bDelete,int num)
{
 HDC hdc;
 HPEN hPen,OldPen;
 int i;
 TCHAR str[256];

 hdc=GetDC(hWndMain);
 for (i=0;i<num;i++) {
  hPen=CreatePen(PS_SOLID,rand()%5+1,RGB(rand()%256,rand()%256,rand()%256));   // 랜덤한 색상의 펜 생성
  OldPen=(HPEN)SelectObject(hdc, hPen);            // OldPen 에 기본 오브젝트 저장 후 펜 장착
  MoveToEx(hdc,rand()%300,rand()%200+40,NULL);          //** CP 위치 무작위 지정
  LineTo(hdc,rand()%300,rand()%200+40);            //** 선그릴 위치 무작위 지정
  if (bUnSel) SelectObject(hdc,OldPen);            // bUnSel(선택) 이 되면...  기본 오브젝트 장착
  if (bDelete) DeleteObject(hPen);             // bDelete(삭제) 가 되면...  생성한 펜 삭제.
  wsprintf(str,TEXT("%d"),i);
  SetWindowText(hWndMain,str);              //** 캡션에다가 str 에 저장된 문자열 출력.
 }
 ReleaseDC(hWndMain,hdc);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
 HDC hdc;
 PAINTSTRUCT ps;
 TCHAR *Mes=TEXT("1:정상적인 경우, 2:선택 해제없이 삭제만, 3:삭제하지 않음");

 switch (iMessage) {
 case WM_KEYDOWN:
  switch (wParam) {
  case '1':
   TestResource(TRUE,TRUE,10000);     // 기본오브젝트를 다시 장착시켜주고, 생선한 펜 삭제한 경우.
   break;                   //=> ** DC에는 항상 오브젝트가 장착 되어 있는 상태여야 함.
  case '2':
   TestResource(FALSE,TRUE,10000);    // 기본 오브젝트를 다시 장착시켜주지 않고, 바로 삭제한 경우.
   break;                   // => DC에 펜이 장착된 채로 삭제됨. - 다른 작업을 진행 할시 문제가 발생.
  case '3':
   TestResource(FALSE,FALSE,10000);    // 기본 오브젝트를 다시 장착시켜주지도 않고, 삭제도 하지 않은 경우.
   break;                   //=> 펜 생성만 계속하게 됨. (리소스 과부하)
  }
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd, &ps);
  TextOut(hdc,10,10,Mes,lstrlen(Mes));
  EndPaint(hWnd, &ps);
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 }
 return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}



반응형

SEARCH

태그로 찾아보기