'Windows'에 해당되는 글 8건

  1. 2007.08.05 끊임없는 OS의 주류와 비주류와의 싸움
  2. 2007.06.28 ScrollBar (1)
  3. 2007.06.28 원점 이동
  4. 2007.06.27 Unicode
  5. 2007.06.27 Message Map
  6. 2007.06.27 MFC 기본 프로그램 구조
  7. 2007.06.27 Afx 함수 모음
  8. 2007.06.27 [MFC] 정리 안내
2007.08.05 14:38

끊임없는 OS의 주류와 비주류와의 싸움

아마 마이크로소프트가 세워지기 이전부터 끊임없이 주류와 비주류와의 싸움은 계속되었으리라 생각된다.

예전에 검색을 하면서 글을 읽어나가다가 하도 어이없는 논리를 펴는 사람을 보았다.
iPhone이 출시되었을 때 iPhone OS에서 웜이나 바이러스가 구동될 수 있고 또 이로 인하여 보안문제에 대하여 심각하게 허술하다는 기사에서 어떤 사람이 댓글을 달았는데 이의 논리는
"iPhone에서 돌아가는 맥OS는 원래 그런 바이러스의 수가 적을 뿐더러 평소 보안문제를 심각하게 생각하는 애플사에서 제작한 것이다. 따라서 문제될 것이 없고 또한 사용하는 사람도 소수이므로 심각하게 받아들일 것은 아니다"
라는 표현을 봤을 때 정말 어이가 없었다.

한창 PC통신의 전성기였을 때 나우누리의 리눅스 동호회에 가입한 적이 있었다. 그리고 리눅스의 비판에 대해서 잠깐 글을 썼을 때 이유도 없이 강퇴당한 것이 있었다.
그 이유를 알 수 없었으나 요즈음 와서 "소수 우월주의"라는 용어를 통하여 이유를 알게되었다.

흔히 주류와 비주류와의 관계를 주장하는 큰 두 부류가 있다. (OS에 한하였을 때)
한 부류는 주류(Microsoft)와 비주류(Linux, Mac, 참고로 비주류는 "일반" 사용자층이 적다는 것이지 성능이 떨어진다든가 그런 기술적인 분류가 아니다)든 간에 어차피 다 같은 운영체제일 뿐인데 각각의 장단점이 있지 극단적으로 어느 한 운영체제가 우월하다는 것은 아니다.

다른 부류는 내가 심각하게 생각하고 경멸하는 집단 "소수 우월주의"의 생각을 가진 사람들이다. 마이크로소프트 계열의 운영체제는 컴퓨터 초보자들을 위한 많이 알려지기만 했지 실제로 다른 OS에 비하여 기술적 성능과 그 편의성은 비교할 수도 없다라고 주장하는 사람이다. 즉 주류는 단순히 경영과 마케팅에 의함이지(사실이긴하다) 비주류가 훨씬 뛰어나다는 것이다.

과연 그럴까? 난 컴퓨터 전문가는 아니기 때문에 이에 대하여 각종 수치 통계를 이용하여 설명할 수는 없다. 하지만 적어도 Win-win 지향적인 대세를 지양하는 행동을 하는 몇몇 소수 우월주의자들이 IT업계에 소속되어 있다는 것만을 생각해도 절망한다.

두서없이 시작한 글이었고 다소 제목과 전혀 관련없는 나만의 생각만 주절주절 쓴 것 같다. 공대생인 탓에 글쓰기 실력이 없어서이다.
앞으로도 주류와 비주류의 싸움은 계속될 것이고 극단적인 사고를 가진 사람들에 의하여 업계는 계속 뜨거워질 것 같다. 하지만 분명한 것은 주류이든 비주류이든 서로 상호간의 비하는 최소화했으면 좋겠다. 정말로 자신이 사용하는 자신이 생각하는 "주류"를 사랑한다면...

P.S. 노파심에 하는 소리인데 극단적인 사고를 하는 우월주의의 사람들은 대부분 Linux 사람들이 아니었던가?

신고
Trackback 150 Comment 0
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


티스토리 툴바