'Visual C++'에 해당되는 글 7건

  1. 2007.06.28 ScrollBar (1)
  2. 2007.06.28 원점 이동
  3. 2007.06.27 Unicode
  4. 2007.06.27 Message Map
  5. 2007.06.27 MFC 기본 프로그램 구조
  6. 2007.06.27 Afx 함수 모음
  7. 2007.06.27 [MFC] 정리 안내
2007.06.28 22:53

ScrollBar

 
  1. 스크롤바 추가하기
  2. 윈도우의 스타일에 WS_VSCROLL이나 WS_HSCROLL 추가한다.

    Create(NULL, _T(""), WS_OVERLAPPEDWINDOW | WS_VSCROLL);


  3. 기본스타일(dwStyle)
  4. WS_VSCROLL

    수직 스크롤바

    WS_HSCROLL

    수평 스크롤바


  5. 확장스타일(dwExStyle)
  6. WS_EX_LEFTSCROLLBAR

    왼쪽 스크롤바


  7. 기본 함수 (구형)
  8. SetScrollRange(int nBar, int nMinPos, int nMaxPos, BOOL bRedraw = 1)

    스크롤바의 범위를 지정한다

    SetScrollPos(int nBar, int nPos, BOOL bRedraw = 1)

    스크롤바의 현재 위치를 지정한다.

    GetScrollRange

    GetScrollPos


    nBar Styles

    SB_VERT

    수직 스크롤바

    SB_HORZ

    수평 스크롤바


    SetScrollRange, SetScrollPos 연속으로 호출되면 스크롤바가 자신을 다시 그리지 않게 한다.

    SetScrollRange(SB_VERT, 0, 100, FALSE);

    SetScrollPos(SB_VERT, 50, TRUE);


  9. SetScrollInfo
  10. 현재는 SetScrollRange, SetScrollPos 쓰지 않는다.


    int SetScrollInfo(      

        HWND hwnd,
        int fnBar,
        LPCSCROLLINFO lpsi,
        BOOL fRedraw
    );


    fnBar

    [in] Specifies the type of scroll bar for which to set parameters. This parameter can be one of the following values.

    SB_CTL

    Sets the parameters of a scroll bar control. The hwnd parameter must be the handle to the scroll bar control.

    SB_HORZ

    Sets the parameters of the window's standard horizontal scroll bar.

    SB_VERT

    Sets the parameters of the window's standard vertical scroll bar.


    typedef struct tagSCROLLINFO {
        UINT cbSize;
        UINT fMask;
        int  nMin;
        int  nMax;
        UINT nPage;
        int  nPos;
        int  nTrackPos;
    }   SCROLLINFO, *LPSCROLLINFO;
    typedef SCROLLINFO CONST *LPCSCROLLINFO;


    cbSize

    Specifies the size, in bytes, of this structure. The caller must set this to sizeof(SCROLLINFO).

    fMask

    Specifies the scroll bar parameters to set or retrieve. This member can be a combination of the following values:

    SIF_ALL

    Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.

    SIF_DISABLENOSCROLL

    This value is used only when setting a scroll bar's parameters. If the scroll bar's new parameters make the scroll bar unnecessary, disable the scroll bar instead of removing it.

    SIF_PAGE

    The nPage member contains the page size for a proportional scroll bar.

    SIF_POS

    The nPos member contains the scroll box position, which is not updated while the user drags the scroll box.

    SIF_RANGE

    The nMin and nMax members contain the minimum and maximum values for the scrolling range.

    SIF_TRACKPOS

    The nTrackPos member contains the current position of the scroll box while the user is dragging it.

    nMin

    Specifies the minimum scrolling position.

    nMax

    Specifies the maximum scrolling position.

    nPage

    Specifies the page size. A scroll bar uses this value to determine the appropriate size of the proportional scroll box.

    nPos

    Specifies the position of the scroll box.

    nTrackPos

    Specifies the immediate position of a scroll box that the user is dragging. An application can retrieve this value while processing the SB_THUMBTRACK request code. An application cannot set the immediate scroll position; the SetScrollInfo function ignores this member.


  11. 범위의 상한값(nMax) 하안값(nMin) 같게 하면 스크롤바는 사라진다.
  12. SCROLLINFO fMask SIF_DISABLENOSCROLL을 입력하면 스크롤바가 더 이상 입력을 받지 못한다.

  13. WM_SIZE Message
    • 최초 메시지: 창이 생성될
    • 이후 메시지: 창의 크기가 바뀔

    afx_msg void OnSize(UINT nType, int cx, int cy);


    nType: SIZE_MINIMIZED, SIZE_MAXIMIZED, SIZE_RESTORED

    cx, cy: 클라이언트의 새로운 폭과 넓이(픽셀)


  14. Scroll Event
  15. afx_msg void OnHScroll(UINT nCode, UINT nPos, CScrollBar* pScrollBar)

    afx_msg void OnHScroll(UINT nCode, UINT nPos, CScrollBar* pScrollBar)


    CWnd::Create 스타일 플래그를 추가하여 생성되었던 스크롤바는 pScrollBar NULL이다.


    nCode Event Code

    SB_LINEUP (SB_LINELEFT)

    화살표

    SB_LINEDOWN (SB_LINERIGHT)

    아래 화살표

    SB_PAGEUP (SB_PAGELEFT)

    화살표와 이동 막대 사이 스크롤바 클릭

    SB_PAGEDOWN (SB_PAGERIGHT)

    아래 화살표와 이동 막대 사이 스크롤바 클릭

    SB_ENDSCROLL

    마우스 버튼이 떼어졌을

    SB_THUMBTRACK

    이동 단추가 이동될

    SB_THUMBPOSITION

    이동 버튼이 놓일


  16. 스크롤바는 스스로 스크롤바 위치를 갱신하지 않는다. (직접 갱신)

  17. 내용 갱신
  18. CWnd::ScrollWindow 빠른 블록 픽셀 전송을 사용하여 창의 클라이언트 영역의 내용 전체 도는 일부를 상하 좌우로 1또는 이상의 픽셀만큼 이동한다.


    BOOL ScrollWindow(      

        HWND hWnd,
        int XAmount,
        int YAmount,
        const RECT *lpRect,
        const RECT *lpClipRect
    );


    The area uncovered by ScrollWindow is not repainted, but it is combined into the window's update region. The application eventually receives a WM_PAINT message notifying it that the region must be repainted. To repaint the uncovered area at the same time the scrolling is in action, call the UpdateWindow function immediately after calling ScrollWindow.

신고
Trackback 0 Comment 1
  1. Jordan 4 2012.02.17 16:54 신고 address edit & del reply

    나이 키 AIR JORDAN 흥행 을 잘 팔 리 는, 4 Shoes 고품질, 일로 돼 씻 어도 된 다.

2007.06.28 22:52

원점 이동

 
  1. SetViewportOrg

    논리 좌표 (0, 0) -> 장치 좌표 (x, y)

  2. SetWindowOrg

    논리 좌표 (x, y) -> 장치 좌표 (0, 0)

    만약 좌표(0, 0)에서 픽셀을 그리려고 하면 좌표쌍은 GDI 의해서 (-x, -y) 변환된다.

    ScrollBar 결합될 경우 스크롤 위치가 (0, 100) 경우 처음 100픽셀은 출력에서 잘려지고 실제 출력은 101번째 픽셀부터 화면에 출력된다.

신고
Trackback 74 Comment 0
2007.06.27 19:24

Unicode

 
  1. ANSI characters
    • "Hello"
  2. Unicode characters
    • L"Hello"
  3. Generic Macro
    • _T("Hello")

    _T("") 매크로 포장 해야

  4. 문자를 char 아닌 TCHAR 선언
  5. TCHAR 문자열의 포인터를 선언할 TCHAR*, LPTSTR, LPCTSTR 사용
  6. 문자열의 크기는 16비트, 버퍼의 길이를 sizeof(TCHAR) 나누어 실제 길이 산출
  7. C 런타임 라이브러리의 문자열 함수를 적절하게 바꿔준다. Strcpy -> _tcscpy
신고
Trackback 0 Comment 0
2007.06.27 19:24

Message Map

 

    이제는 외우자!


    받을 있는 모든 메시지에 대한 가상 함수가 모든 클래스에 존재하는 경우에 요구되는 VTABLE 피하기 위하여 CCmdTarget에서 파생된 모든 클래스에는 메시지 맵이 포함되어 있다.


  1. 클래스 정의에 DECLARE_MESSAGE_MAP(target class, base class) 구문 추가하여 메시지 선언
  2. BEGIN_MESSAGE_MAP END_MESSAGE_MAP사이에 해당 클래스가 처리해야 메시지를 식별하는 매크로를 삽입한다.
  3. 멤버 함수를 재정의하여 추가작업을 처리한다.

    Afxmsg_.h 참조



  4. DECLARE_MESSAGE_MAP Macro

    P61




신고
Trackback 53 Comment 0
2007.06.27 19:23

MFC 기본 프로그램 구조

 

적어도 이정도는 기억해두자 (맨날 까먹어…)


class CMyApp : public CWinApp

{

public:

virtual BOOL InitInstance();

};


class CMainWindow : public CFrameWnd

{

public:

CMainWindow();


protected:

afx_msg void OnPaint();

DECLARE_MESSAGE_MAP()

};


#include <afxwin.h>

#include "Hello.h"


CMyApp myApp;


BOOL CMyApp::InitInstance()

{

m_pMainWnd = new CMainWindow;


m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();


return TRUE;

}


BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)

ON_WM_PAINT()

END_MESSAGE_MAP()


CMainWindow::CMainWindow()

{

Create(NULL, _T("The Hello Application"));

}


void CMainWindow::OnPaint()

{

CPaintDC dc(this);

CRect rect;

GetClientRect(&rect);


dc.DrawText(_T("HELLO MFC"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);

}


신고
Trackback 107 Comment 0
2007.06.27 19:22

Afx 함수 모음

 

내용이 없는 것은 충분히 함수이름만으로도 파악 가능


AfxAbort

응용프로그램 종료, 복구할 없는 오류 발생의 경우

AfxBeginThread


AfxEndThread


AfxMessageBox


AfxGetApp


AfxGetAppName


AfxGetMainWnd


AfxGetInstahceHandle


AfxRegisterWndClass

MFC응용 프로그램에 대한 사용자 정의 WNDCLASS 등록한다.

신고
Trackback 29 Comment 0
2007.06.27 19:20

[MFC] 정리 안내

여기에 올리는 것은 그냥 외울 것.

신고
Trackback 141 Comment 0


티스토리 툴바