Search

'Programming/MFC'에 해당되는 글 3건

  1. 2010.07.13 [김재진][API]Dialog에서 Slider Componet를 사용하기
  2. 2010.06.06 [서동권] MFC 메뉴 삭제하는 방법
  3. 2010.05.27 [장영수]MFC-Cimage 1

[김재진][API]Dialog에서 Slider Componet를 사용하기

Programming/MFC 2010. 7. 13. 18:23 Posted by 알 수 없는 사용자
float g_fPos1 = 1; // Slider 수치값을 저장할 변수

// Dialog Callback Function Create
BOOL CALLBACK  DlgMapInfo(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
    switch(iMessage)
    {
    case WM_INITDIALOG:
        // SendMessage(GetDlgItem(hDlg, IDC_SLIDER1) Slider를 사용한 Wnd 값을 가져온다.
        // TBM_SETRANGE는 SLIDER Range 설정
        // MAKELPARAM(최소값, 최대치) 값을 설정한다.
        SendMessage(GetDlgItem(hDlg, IDC_SLIDER1), TBM_SETRANGE, false, MAKELPARAM(1, 10));
        // 위치값 설정 TBM_SETPOS
        SendMessage(GetDlgItem(hDlg, IDC_SLIDER1), TBM_SETPOS, NULL, 0);
        // Edit Component에 출력
        SetDlgItemInt(hDlg, IDC_EDIT1, (int)g_fPos1, true);
        // Dialogbox를 새로 고침
        InvalidateRect(hDlg, NULL, true);
        return true;

    // Slider Scoll 변경 Event 처리
    case WM_HSCROLL:
        // 실행된 윈도우 Handle 값을 가져와서 Slider Component의 값을 읽어온다.
        if((HWND)lParam == GetDlgItem(hDlg, IDC_SLIDER1))
        {
            // Slider Component 의 값을 읽어와 g_fPos에 저장
            // TBM_GETPOS : Slider의 위치값을 읽어온다.
            g_fPos1 = (float)SendMessage(GetDlgItem(hDlg, IDC_SLIDER1), TBM_GETPOS, 0, 0);
            // Edit Component 에 값을 입력한다.
            SetDlgItemInt(hDlg, IDC_EDIT1, (INT)g_fPos1 , FALSE);
            InvalidateRect(hDlg, NULL, true);
        }

        return true;
    case WM_DESTROY:
        EndDialog(hDlg, IDCANCEL);
        return true;
    }
    return false;
}

※ 주의사항 : Resource에 Dialog를 생성하고 그 안에 Slider Component를 생성한 후에 적용 시켜야 함.

'Programming > MFC' 카테고리의 다른 글

[서동권] MFC 메뉴 삭제하는 방법  (0) 2010.06.06
[장영수]MFC-Cimage  (1) 2010.05.27

[서동권] MFC 메뉴 삭제하는 방법

Programming/MFC 2010. 6. 6. 13:01 Posted by 힝고니
실수로 메뉴를 생성한채로 프로젝트를 만들었는데 그것도 모르고

계속 코딩하다가 컴파일했더니 헐...왜 메뉴가 있지? 난 메뉴안쓸건데...

이런경우가 혹시나 있으셨던분??

아니면 메뉴를 사용하려고 했다가 나중에 에잉 빼는게 좋겠다 하셨던적이 없으셨나요??

이때 괜히 메뉴관련된 리소스를 지우거나 코드를 수정했다가 뭔가 꼬인것을 풀지 못했거나

MFC 특성상... 제대로 해주지 않으면 상당히 골치아프게 되어서 아예 새로 만들어야 할수가
있는데, 머리아프지 않고 쉽게 메뉴를 삭제하는 방법이 있어서 올립니다.

* 물론 저같이 허당이 아니라 그냥 코드만 보면 답이 딱 나오시는 분은 직접 수정하셔도 됨

아래 트랙백을 눌러서 보세요.

'Programming > MFC' 카테고리의 다른 글

[김재진][API]Dialog에서 Slider Componet를 사용하기  (0) 2010.07.13
[장영수]MFC-Cimage  (1) 2010.05.27

[장영수]MFC-Cimage

Programming/MFC 2010. 5. 27. 17:11 Posted by 알 수 없는 사용자
cImage 사용하다가 막혀서 불펌 -ㅂ-ㅋㅋ

----

CImage는 MS에서 .net 이후부터 제공되는 그림 관련 클래스임.
이전 CBitmap의 bmp만 다루던거에서 좀더 확장하여 Png, Jpg, gif등 다양한 포멧을 지원한다.

기본적으로 사용은
CImage image; 로 한다.

CImage는 일종의 스케치북으로 볼수 있다.

사용법으로
CImage.Create(width, height, bpp); 로 새 스케치북을 만드거나
CImage.Load(CString("filename")); 으로 파일을 받아올수 있다.

이렇게 만들어진것중에서 자주 사용하는 매소드로
BitBlt ... : 기본 API 이다.
사용법은
CImage image;
image.Load("test.jpg");
image.BitBlt(pDC, 0, 0);

이러면 pDC의 0,0 지점에 test.jpg 그림이 복사된다.
좀더 응용하면

CImage a,b;
a.Load("test.jpg");
b.Create(a.GetWidth(), a.GetHeight(), a.GetBPP());
a.BitBlt(b.GetDC(), 0, 0);
b.ReleaseDC();

이렇게 하면 b에 a의 그림이 복사된다.
중요 포인트는 GetDC()를 해준뒤 바로 ReleaseDC를 해줘야 한다.

나머지 대충 사용하면되고..

GetPixel의 경우..
GetPixel과 SetPixel을 그대로 사용하는건 정말 CPU혹사시키는 짓이다.
다음 함수로 대체 하는것이 좋다

// SetPixel 대용
void PointColor(CImage *image, int x, int y, COLORREF c)
{
 // m_image.SetPixel() call ::SetPixel() which is too slow
 // since it has to work with all DCs.

 BYTE *p = (BYTE*)image->GetPixelAddress(x, y);
 if (m_nBitDepth == 16) {
  *(WORD *)p = (WORD)(((c&0xf80000) >> 19) | ((c&0xf800) >> 6) | ((c&0xf8) << 7));
 }
 else {
  *p++ = GetBValue(c);
  *p++ = GetGValue(c);
  *p = GetRValue(c);
 }
}

// GetPixel 대용
COLORREF GetPointColor(CImage *image, int x, int y)
{
 COLORREF result = *((COLORREF*)image->GetPixelAddress(x,y));

 // 메모리에서 가져올때, blue와 red위치가 바뀌어서 가져와진다
 BYTE r = GetBValue(result);
 BYTE g = GetGValue(result);
 BYTE b = GetRValue(result);
 
 return RGB(r,g,b);
}