UINT CBoayoDlg::OnNcHitTest(CPoint point)
{
    // TODO: Add your message handler code here and/or call default

    RECT rc;
    GetWindowRect(&rc);

    long x, y;

    x = point.x;// + rc.left;
    y = point.y;// + rc.top;


    if((rc.top <= y) && (y <= rc.top+10))
    {
        if((rc.left <= x) && (x <= rc.left+10))
        {
            return HTTOPLEFT;
        }

        if((rc.right >= x) && (x >= rc.right-10))
        {
            return HTTOPRIGHT;
        }

        return HTTOP;
    }

    if((rc.bottom >= y) && (y >= rc.bottom-10))
    {
        if((rc.left <= x) && (x <= rc.left+10))
        {
            return HTBOTTOMLEFT;
        }

        if((rc.right >= x) && (x >= rc.right-10))
        {
            return HTBOTTOMRIGHT;
        }

        return HTBOTTOM;
    }

    if((rc.left <= x) && (x <= rc.left+10))
    {
        if((rc.top <= y) && (y <= rc.top+10))
        {
            return HTTOPLEFT;
        }
        if((rc.bottom >= y) && (y >= rc.bottom-10))
        {
            return HTBOTTOMLEFT;
        }

        return HTLEFT;
    }

    if((rc.right >= x) && (x >= rc.right-10))
    {
        if((rc.top <= y) && (y <= rc.top+10))
        {
            return HTTOPRIGHT;
        }
        if((rc.bottom >= y) && (y >= rc.bottom-10))
        {
            return HTBOTTOMRIGHT;
        }

        return HTRIGHT;
    }   
   
    return CDialog::OnNcHitTest(point);
}
2007/09/01 22:19 2007/09/01 22:19

vc++ 둥근 컨트롤

개발/Visual Studio 2007/09/01 22:18 posted by zekill
//다이얼로그나 버튼이나 뭐이런 하나의 윈도우 들을 둥글게나..
//둥그스런 사각형이나..폴리곤형식 등의 형태로
//영역지정을 하여 모양변경이 가능하다
//region으로 가능
//아래 참조

RECT rc;
pWnd->GetWindowRect(&rc);
HRGN hRgn;
hRgn = CreateEllipticRgn(rc.left,rc.top,rc.right,rc.bottom);
pWnd->SetWindowRgn(hRgn, true);
2007/09/01 22:18 2007/09/01 22:18
TAG , ,

vc++ 배경그리기

개발/Visual Studio 2007/09/01 22:17 posted by zekill
OnEraseBkgnd(CDC* pDC)
{
    // TODO: Add your message handler code here and/or call default
    CClientDC dc(this);
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);

    CBitmap *bmpImage;
    bmpImage = CBitmap::FromHandle((HBITMAP)LoadImage(GetModuleHandle(NULL), "skin\\All player1.bmp", IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE ));

    BITMAP bitmap;
    ::GetObject(*bmpImage, sizeof(BITMAP), &bitmap);

    CBitmap* pOld = memDC.SelectObject(bmpImage);
   
   
    memDC.SetBkMode(TRANSPARENT);  // 배경을 투명하게 하게 한다.
    memDC.SetTextColor(RGB(255, 255, 255));

    //dc.BitBlt(0, 0, bitmap.bmWidth, bitmap.bmHeight, &memDC, 0, 0, SRCCOPY);
   
    dc.SelectObject(pOld);
    memDC.DeleteDC();
    ReleaseDC(pDC);
   
    Invalidate(false);  // 컨트롤을 다시 그려주기 위해서 호출하였음

    return CDialog::OnEraseBkgnd(pDC);
}

//뭐..대충 간단하게...이렇게도...
    CRect rc;
    GetClientRect(&rc);

    CDC MemDC;
    MemDC.CreateCompatibleDC(pDC);

    CBitmap *bmpImage;
    bmpImage = CBitmap::FromHandle((HBITMAP)LoadImage(GetModuleHandle(NULL), "Images\\BG.bmp", IMAGE_BITMAP, 0, 0,LR_CREATEDIBSECTION | LR_LOADFROMFILE ));

    //BITMAP bitmap;
    //::GetObject(*bmpImage, sizeof(BITMAP), &bitmap);

    CBitmap* pbmpOld = MemDC.SelectObject( bmpImage );
    pDC->BitBlt(0, 0, rc.right, rc.bottom, &MemDC, 0, 0, SRCCOPY);

    MemDC.SelectObject( pbmpOld );
    ReleaseDC(pDC);


//배경 패턴으로..반복시키기...
   
    CClientDC dc(this);
    CDC memDC;
    memDC.CreateCompatibleDC(&dc);
    CRect rect;
    GetClientRect(&rect);

    CBitmap *bmpImage;
    bmpImage = CBitmap::FromHandle((HBITMAP)LoadImage(GetModuleHandle(NULL), "images\\전지현1.bmp", IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE ));

    BITMAP bitmap;
    ::GetObject(*bmpImage, sizeof(BITMAP), &bitmap);

    CBitmap* pOld = memDC.SelectObject(bmpImage);
   
   
    memDC.SetBkMode(TRANSPARENT);  // 배경을 투명하게 하게 한다.
    memDC.SetTextColor(RGB(255, 255, 255));

    int bmw, bmh ;
    bmw = bitmap.bmWidth;
    bmh = bitmap.bmHeight;
    int xo=0, yo=0;

    for (yo = 0; yo < rect.Height(); yo += bmh)
    {
        for (xo = 0; xo < rect.Width(); xo += bmw)
        {
            dc.BitBlt(xo, yo, rect.Width(),    rect.Height(), &memDC,    0, 0, SRCCOPY);
        }
    }

    dc.SelectObject(pOld);
    memDC.DeleteDC();
    ReleaseDC(pDC);
   
   
    Invalidate(false);  // 컨트롤을 다시 그려주기 위해서 호출하였음




//늘려서 찍는건 StrechBlt() -0-










//SDI 에서 배경찍기

제     목 [ㅁ] 314876 anecia@unitel.co.kr 314840 10 10  
작 성 자 진용철(anecia)    
첨부
파일  
작성시각 2003-06-09 오전 5:34:29 조 회 수 249
글 분 류 VC++ 일반  

안녕하세요?



FormView이면

OnPaint 함수에서

BitBlt 함수를 이용해 그려주시면 됩니다.

사용할 이미지는 리소스에 추가를 하시던가 파일을 로드해 주시구요.

로드하는 함수는 LoadImage를 이용하시면 됩니다.



파일인 경우...

    hBMP = (HBITMAP)LoadImage(NULL, lpszFileName,

        IMAGE_BITMAP, 0, 0,

        LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);



리소스인 경우...

    hBMP = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2),

                                IMAGE_BITMAP, 0, 0,

                                LR_CREATEDIBSECTION | LR_DEFAULTSIZE );





예제 입니다. 아래 함수는 비트맵 파일 lpszFileName을 원하는 DC의 원하는 좌표에

그립니다.

폼뷰의 OnPaint에서

CPaintDC dc(this);  하신다음

DrawBMP("test.bmp", &dc, 0, 0, SRCCOPY); 해보세요.



void DrawBMP(LPCTSTR lpszFileName, CDC *pDC, int nX, int nY, DWORD dwRop)

{

    CDC         memDC;

    CBitmap     bmp, *pOldBmp;

    HBITMAP     hBMP;

    BITMAP      bm;

   

    hBMP = (HBITMAP)LoadImage(NULL, lpszFileName,

        IMAGE_BITMAP, 0, 0,

        LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);

/*

    hBMP = (HBITMAP)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP2),

                                IMAGE_BITMAP, 0, 0,

                                LR_CREATEDIBSECTION | LR_DEFAULTSIZE );

*/



    bmp.Attach(hBMP);

    bmp.GetBitmap(&bm);

    memDC.CreateCompatibleDC(pDC);

    pOldBmp = memDC.SelectObject(&bmp);

   

    pDC->BitBlt(nX, nY, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, dwRop);

   

    memDC.SelectObject(pOldBmp);

}
2007/09/01 22:17 2007/09/01 22:17
TAG ,
//머라 이름을 정하기가 좀 그래서 그렇지만...-0-;;;
//버튼에 투명을 지정하였는데도 투명지정된곳의
//색이 빠지고 바닥색..음..회색으로 계속 남아있을때는
// 아래의 CtlColor 이라는 함수를 추가하여
// (HBRUSH)::GetStockObject(NULL_BRUSH) 이놈을 리턴시키면 된당...
HBRUSH CtlColor(CDC* pDC, UINT nCtlColor)
{
    // TODO: Change any attributes of the DC here
   
    // TODO: Return a non-NULL brush if the parent's handler should not be called
    //return NULL;
    return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
2007/09/01 22:16 2007/09/01 22:16

vc++ 뷰의 스크롤바 없애자~

개발/Visual Studio 2007/09/01 22:16 posted by zekill
void OnSize(UINT nType, int cx, int cy)
{
    CFormView::OnSize(nType, cx, cy);
   

//이거 같이 한줄로 해도되고....
    if(m_bInit)
        SetScrollSizes(MM_TEXT, CSize(cx, cy));  // <<- 스크롤바 없애기...



//이거 같이 여러줄(?)로.. 해도되고..ㅡㅡ;;;   
    if(m_bInit){
        CRect rect;
        CSize size;
        GetWindowRect(&rect);
        size = rect.Size();

        SetScaleToFitSize(size);  
        GetParentFrame()->RecalcLayout();
    }
//(m_bInit) 요넘은 init가 되었는지 체크하는 플래그
//저거 안하면 기본사이즈 맘대로 커지더라...-0-;;;
//뭐사이즈야..별도로 지정해도 되고...-0-;;;; movewindow
}
2007/09/01 22:16 2007/09/01 22:16