Win32API는 C로 만들어졌음
MFC는 Win32API를 C++로 감쌈(wrapping)

STL은 C++에서 쓰기쉽도록 여러가지 라이브러리를 모아놓은 것
ATL은 COM을 쉽게 쓸수 있도록 만든 것
WTL은 ATL 기반으로 MFC와 ActiveX를 경량화한 것

MFC의 일부는 COM을 지원하도록 설계
ATL은 COM을 지원하도록 전적으로 설계
ActiveX는 ATL이나 MFC로 작성가능

OWL은 borland c++ 을 위한 winAPI framework
boost C++ library는 c++ 를 확장하기 위한 것.


[링크 : http://en.wikipedia.org/wiki/Win32]
[링크 : http://en.wikipedia.org/wiki/Standard_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Windows_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Active_Template_Library]
[링크 : http://en.wikipedia.org/wiki/Microsoft_Foundation_Classes]
[링크 : http://en.wikipedia.org/wiki/Component_Object_Model]
[링크 : http://en.wikipedia.org/wiki/Object_Windows_Library]
[링크 : http://en.wikipedia.org/wiki/Boost_C%2B%2B_Libraries]

[링크 : http://msdn.microsoft.com/en-us/library/k851ext3%28VS.80%29.aspx] MFC/COM
[링크 : http://msdn.microsoft.com/en-us/library/k194shk8%28v=VS.80%29.aspx] MFC/ActiveX

[링크 : http://kanemochi.egloos.com/8848925]
[링크 : http://jacking75.cafe24.com/WTL/Index.htm]
신고

'Programming > ATL / WTL / COM' 카테고리의 다른 글

win32API(winAPI), MFC, ATL, STL, WTL, OWL  (8) 2010.09.07
Posted by 구차니

댓글을 달아 주세요

  1. 무난한놈

    정리 잘하셨네요...

    2010.09.07 23:13 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 음.. 제대로된 정리가 아닌거 같아서
      추후에 공개할까 하다가 그냥 열어둔건데 ㅠ.ㅠ

      잘못된 것들이 많을꺼 같아요. ^^;

      2010.09.08 08:41 신고 [ ADDR : EDIT/ DEL ]
  2. 우리말인데도 영어가 더 많은...

    2010.09.08 00:39 신고 [ ADDR : EDIT/ DEL : REPLY ]
  3. 호오.. 이렇게 보니 새롭네요.

    MFC는 C# 쓴 이후로 거들떠 보지도 않고 있다는.... ㅋㅋㅋ

    2010.09.08 08:50 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 전 MS쪽 Framework들을 제대로 사용해본적이 거의 없어서 그러는데 위에 내용이 맞는건가요? ㅠ.ㅠ

      후우.. MFC 외에는 거의 못 다루는데 ATL을 다뤄야 할지도 모르는 상황이라 이래저래 파보고 있네요.

      2010.09.08 08:56 신고 [ ADDR : EDIT/ DEL ]
    • 전 ATL은 거의 써본적이 없네요.

      아무래도 게임쪽이다 보니.. 쓸 일이...

      MFC도 툴이나 만들때 조금 쓰고는... ㅋㅋㅋ

      2010.09.08 09:08 신고 [ ADDR : EDIT/ DEL ]
    • 으헝헝 가끔 티스님의 머리에서 필요한 정보를 좀 캐가고 싶어요 ㅎ

      2010.09.08 09:14 신고 [ ADDR : EDIT/ DEL ]


CEdit 컨트롤의 색상을 변경하기 위해서는 WM_CTLCOLOR을 이용한다.
일단 전역변수로 CBrush COLORREF 변수를 선언해준다.
그리고 나서 클래스 위저드에서 다이얼로그 자체의 WM_CTLCOLOR을 생성해준다.

이 녀석은 그리기 전에 메시지를 가로채서 색상을 설정해주는 역활을 한다고 한다.

OnInitDialog() 에서
    m_redcolor=RGB(255,0,0);                      // red
    m_bluecolor=RGB(0,0,255);                     // blue
    m_textcolor=RGB(255,255,255);                 // white text
    m_redbrush.CreateSolidBrush(m_redcolor);      // red background
    m_bluebrush.CreateSolidBrush(m_bluecolor);    // blue background
이런식으로 브러시와 색상을 미리 설정해준다.

그 다음에, OnCtlColor에서 GetDlgCtrlID()에 의해 분기를 쳐주면서
원하는 컨트롤의 ID에 연결해주면 원하는 색상으로 그려진다.

    pDC->SetBkColor(m_bluecolor);
    pDC->SetTextColor(m_textcolor);
    hbr = (HBRUSH) m_bluebrush;

위의 내용을 사용하면되며,
    SetBKColor()은 배경색상(기본값은 흰색)
    SetTextColor()은 글씨색상(기본값은 검은색)
을 변경해주게 된다.

브러시를 리턴함으로, 이 브러시를 이용하여 실제로 변경한 색상으로 그려주게 된다.


아래는 OnCtlColor의 기본 템플릿이다.
클래스위저드가 생성하면 // TODO 사이의 내용이 없으므로 불편하다.
HBRUSH CBarcodeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	switch(nCtlColor)
	{
		case CTLCOLOR_EDIT:
		case CTLCOLOR_MSGBOX:
			switch (pWnd->GetDlgCtrlID())
			{
				default:
					break;
			}
			break;

		case CTLCOLOR_STATIC:
			switch (pWnd->GetDlgCtrlID())
			{
				default:
					break;
			}
			break;

		default:
			break;
	}
	
	// TODO: Return a different brush if the default is not desired
	return hbr;
}


[링크 : http://www.codeguru.com/Cpp/controls/editctrl/backgroundcolor/article.php/c3929/#more]
[링크 : http://mind444.tistory.com/64]
신고
Posted by 구차니

댓글을 달아 주세요

  1. 6.0..=ㅂ=..ㅎㅎ

    2009.09.03 01:49 신고 [ ADDR : EDIT/ DEL : REPLY ]

CTreeCtrl은 탐색기의 디렉토리를 보여주는 녀석이다
트리컨트롤에 데이터를 넣는 방법은 InserItem 이라는 함수를 사용하면 되는데,
이 함수를 유심히 살펴보면 HTREEITEM hParen = TVI_ROOT 라는 것이 있다.

// afxcmn.h
// Operations
	HTREEITEM InsertItem(LPTVINSERTSTRUCT lpInsertStruct);
	HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage,
		int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam,
		HTREEITEM hParent, HTREEITEM hInsertAfter);
	HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT,
		HTREEITEM hInsertAfter = TVI_LAST);
	HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage, int nSelectedImage,
		HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);

// commctrl.h #define TVI_ROOT ((HTREEITEM)0xFFFF0000) #define TVI_FIRST ((HTREEITEM)0xFFFF0001) #define TVI_LAST ((HTREEITEM)0xFFFF0002) #define TVI_SORT ((HTREEITEM)0xFFFF0003)

별 다른 것은 없고, 이번에 추가하는 아이템은 Root 아이템으로 적용을 하라는 것인데,
Root 아이템은 위의 이미지에서 Expanded Node / Leaf 라는 두녀석이다.
아무튼 위와 같이 tree 구조로 넣기위해서는 InserItem 함수의 return 값을 유심히 봐야한다.

HTREEITEM InsertItem(LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);

InsertItem은 리턴값으로 추가한 녀석의 핸들을 돌려준다.
그리고 입력으로 TVI_ROOT가 들어가거나 혹은 핸들이 들어간다.



위와 같은 구조로 하기 위해서는 아래와 같이 구현하면 된다.

HTREEITEM expand;
HTREEITEM expand_2nd;
HTREEITEM expand_3rd;

expand= InsertItem("Expanded Node", TVI_ROOT, TVI_LAST);
expand_2nd = InsertItem("Expanded Node", expand, TVI_LAST);
                            InsertItem("Leaf", expand_2nd, TVI_LAST);
                            InsertItem("Leaf", expand_2nd, TVI_LAST);
expand_3rd = InsertItem("Collapsed Node", expand, TVI_LAST);
                            InsertItem("Leaf", expand_3rd, TVI_LAST);
                            InsertItem("Leaf", expand_3rd, TVI_LAST);
InsertItem("Leaf", TVI_ROOT, TVI_LAST);


[링크 : http://msdn.microsoft.com/ko-kr/library/7w95665f%28VS.80%29.aspx] CTreeCtrl Members
[링크 : http://msdn.microsoft.com/ko-kr/library/cc468290%28VS.71%29.aspx]
신고
Posted by 구차니

댓글을 달아 주세요

PreTranslateMessage() 를 추가 후에

if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) return TRUE;

를 사용하면 엔터, ESC로 종료되는것을 막을 수 있다.


만약에 Editbox에서 엔터로 입력을 받아들여야 할 경우에는, 위와 같이 하면 인식을 못하게 되므로

CWnd *w;
w = GetFocus();
if (w->GetDlgCtrlID() == IDC_CTRL_ID) ...

이런식으로 특정 포커스에서 인식하도록 연결해주면 될 듯?


[링크 : http://lafirr.tistory.com/20] PreTranslateMessage
[링크 : http://www.dreamy.pe.kr/zbxe/?mid=codeclip&category=5904&document_srl=5958] PreTranslateMessage
[링크 : http://purelab.org/zbxe/?mid=guruin&page=3&document_srl=250] 서브클래싱
신고
Posted by 구차니

댓글을 달아 주세요

MFC에서 RichEdit 라는 녀석이 있다.

바로 요녀석


근데, 추가하고 컴파일 하고 실행하면.. 화면이 안뜬다!!!
이유는 모르겠지만, 해결 방법은

AfxInitRichEdit();

를 적정위치에 넣어주는 것이다.
메인 프로젝트의 컨스트럭터의 TODO에 넣어 주자!

[링크 : http://bear.sage.kr/60]
신고
Posted by 구차니

댓글을 달아 주세요

  1. 반 이상도 못알아 듣는 용어들 속에 아주 친숙한 표현이 하나 있네요. "녀석"

    2009.06.12 18:34 신고 [ ADDR : EDIT/ DEL : REPLY ]