CEdit control의 font 바꾸기

Programming/MFC 2016. 10. 25. 13:52 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CEdit control의 font 바꾸기


요약
Windows 95 에서 Edit control를 사용할 때는 일반적으로 font를 바꾸지 않고 그대로 사용한다. 그러나 MFC에서는 CEdit control를 사용하는 경우 CWnd::SetFont()를 이용해서 그 font를 바꿀수가 있다. 

한글 Windows 95를 사용할 때는 CWnd::SetFont()에서 사용하게 될 LOGFONT의 lfCharSet 변수를 한글 Character Set code인 0x81 로 setting해 주어야 한다.
추가 정보
다음은 Dialog의 edit control의 font를 20 point의 궁서체로 바꾸는 예이다.
BOOL CMyDlg::OnInitDialog() 
{
LOGFONT lf;

memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = 0x81;			// 한글 Character Set
lf.lfHeight = 20;			// 20 point 크기
strcpy(lf.lfFaceName, "궁서체"); 	// 궁서체로 font setting
m_font.CreateFontIndirect(&lf);	

CEdit* pCtlEdit = (CEdit*) GetDlgItem(IDC_EDIT1); // edit control의 
                                                  // pointer를 가져옴
pCtlEdit->SetFont((CFont*)&m_font, TRUE);

return TRUE;
}
					


출처 : https://support.microsoft.com/ko-kr/kb/600665





추가로 CFont m_font; 선언 필요.





CTextProgressCtrl hide Edge

Programming/MFC 2016. 10. 25. 11:53 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CTextProgressCtrl hide Edge





void CTextProgressCtrl::OnPaint()

{

......

DrawEdge(dc, ClientRect, EDGE_SUNKEN, BF_ADJUST | BF_RECT | BF_FLAT);

......

}







if you want to hide CTextProgressCtrl's Edge,


add "//"



void CTextProgressCtrl::OnPaint()

{

......

// DrawEdge(dc, ClientRect, EDGE_SUNKEN, BF_ADJUST | BF_RECT | BF_FLAT);

......

}

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFCGridCtrl CGridCtrl ScrollBar Visible






If you change Dialog color used by OnEraseBkgnd();



you can't see CGridCtrl's ScrollBar











in that case, you should add m_Grid.SetRedraw(true, true); to OnEraseBkgnd();











BOOL CMyDialog::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

	CRect rect;

	GetClientRect(&rect);

	CBrush myBrush(RGB(255, 255, 255));    // dialog background color <- 요기 바꾸면 됨.
	
	CBrush *pOld = pDC->SelectObject(&myBrush);

	BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);

	pDC->SelectObject(pOld);    // restore old brush

	m_Grid.SetRedraw(true, true);

	return bRes;                       // 	return CDialog::OnEraseBkgnd(pDC);
}


MFC CGridCtrl Color Change

Programming/MFCGridCtrl 2016. 10. 20. 15:09 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC CGridCtrl Color Change




 





COLORREF ItemBkColour = RGB(255,255,255);

m_Grid.SetItemBkColour(0, 0, ItemBkColour);

m_Grid.SetItemBkColour(0, 1, ItemBkColour);

m_Grid.SetItemBkColour(0, 2, ItemBkColour);

m_Grid.SetItemBkColour(0, 3, ItemBkColour);






m_Grid.SetBkColor(RGB(255, 0, 0)); 






MFC CWnd Control Border Color Change

Programming/MFC 2016. 10. 20. 14:48 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC CWnd Control Border Color Change









CWnd::OnNcPaint

 

게시: 2016년 4월

The framework calls this member function when the nonclient area needs to be painted.

비클라이언트 영역을 그려야 할 때 프레임 워크는이 멤버 함수를 호출 합니다.

afx_msg void OnNcPaint( );

The default implementation paints the window frame.


An application can override this call and paint its own custom window frame. The clipping region is always rectangular, even if the shape of the frame is altered.


기본 구현에서는 창 프레임을 그립니다.


응용 프로그램이이 호출을 무시 하 고 자체 사용자 지정 창 프레임을 페인트할 수 있습니다. 클리핑 영역은 프레임의 모양을 변경 하는 경우에 항상 사각형입니다.



void CDerivedEdit::OnNcPaint() 
{
		CDC* pDC = GetWindowDC( );
		
		//work out the coordinates of the window rectangle,
		CRect rect;
		GetWindowRect( &rect);
		rect.OffsetRect( -rect.left, -rect.top);
		
		//Draw a single line around the outside
		CBrush brush( RGB( 255, 0, 0));
		pDC->FrameRect( &rect, &brush);
		ReleaseDC( pDC);
}


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

CEdit control의 font 바꾸기  (0) 2016.10.25
CTextProgressCtrl hide Edge  (0) 2016.10.25
MFC CheckBox 컨트롤의 현재 상태  (0) 2016.10.19
MFC Control Color Change  (0) 2016.10.19
MFC Bitmap Button  (0) 2016.10.18

MFC CheckBox 컨트롤의 현재 상태

Programming/MFC 2016. 10. 19. 17:31 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

      BOOL bCheck = IsDlgButtonChecked(IDC_CHECK);

 

      //MFC CheckBox 컨트롤의 현재 상태를 얻어오는 예제입니다.

      //    bCheck 변수가 1 이면 현재 체크박스가 체크되어 있는 상태를 의미하며 반대로 0이면 체크해제되어 있는 상태입니다.

 

      CheckDlgButton(IDC_CHECK, TRUE);

 

      // MFC CheckBox 컨트롤을 체크 및 체크해제 하는 예제입니다.

      //    두번째 매개변수가 TRUE일 경우 해당 체크박스에 체크되며 FALSE일 경우에는 체크가 해제됩니다.


       if (!IsDlgButtonChecked(IDC_TIME_CHECK))

      {

            return;

      }

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

CTextProgressCtrl hide Edge  (0) 2016.10.25
MFC CWnd Control Border Color Change  (0) 2016.10.20
MFC Control Color Change  (0) 2016.10.19
MFC Bitmap Button  (0) 2016.10.18
MFC Tab Control Color Change #2  (0) 2016.10.18

MFC Control Color Change

Programming/MFC 2016. 10. 19. 17:20 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC Control Color Change






afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);


 

 

      CBrush m_combo_brush;

      m_combo_brush.CreateSolidBrush(RGB(0, 0, 255)); // Brush 속성을 생성한다.





HBRUSH MyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

      HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

 

      // TODO:  여기서 DC의 특성을 변경합니다.

 

      switch (nCtlColor) {

           

      case CTLCOLOR_STATIC:

            pDC->SetTextColor(RGB(255, 0, 0));

            pDC->SetBkColor(RGB(0, 0, 0));

            return (HBRUSH)(m_combo_brush);

      case CTLCOLOR_LISTBOX:

            pDC->SetTextColor(RGB(0, 255, 0));

            pDC->SetBkColor(RGB(0, 0, 0));

            return (HBRUSH)(m_combo_brush);

      default:

            break;

      }

      if (pWnd->m_hWnd == GetDlgItem(IDC_SERVERLIST_COMBO)->m_hWnd)

            hbr = HBRUSH(m_combo_brush);

 

      // TODO:  기본값이 적당하지 않으면 다른 브러시를 반환합니다.

      return hbr;

}

 




pDC

자식 창에 대 한 디스플레이 컨텍스트를 포인터를 포함합니다. 일시적일 수 있습니다.

pWnd

컨트롤의 색을 요청에 대 한 포인터를 포함 합니다. 일시적일 수 있습니다.

nCtlColor

컨트롤의 형식을 지정 하는 다음 값 중 하나가 포함 됩니다.

  • CTLCOLOR_BTN 단추 컨트롤

  • CTLCOLOR_DLG 대화 상자

  • CTLCOLOR_EDIT 편집 컨트롤

  • CTLCOLOR_LISTBOX 목록 상자 컨트롤

  • CTLCOLOR_MSGBOX 메시지 상자

  • CTLCOLOR_SCROLLBAR 스크롤 막대 컨트롤

  • CTLCOLOR_STATIC 정적 컨트롤



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

MFC CWnd Control Border Color Change  (0) 2016.10.20
MFC CheckBox 컨트롤의 현재 상태  (0) 2016.10.19
MFC Bitmap Button  (0) 2016.10.18
MFC Tab Control Color Change #2  (0) 2016.10.18
MFC Tab Control Color Change #1  (1) 2016.10.18

MFC Bitmap Button

Programming/MFC 2016. 10. 18. 13:22 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC Bitmap Button



BitmapButton

ImageButton



1. Button Property


[Owner Draw] : True










2. Add Member Variable









3. Change Member Variable Type



CButton -> CBitmapButton








4. Load Bitmaps









m_Connect_Btn.LoadBitmaps(IDB_BITMAP_CONNECT_RESOURCE, IDB_BITMAP_CONNECT_SEL, IDB_BITMAP_CONNECT_FOCUS, IDB_BITMAP_CONNECT_DISABLED)
m_Connect_Btn.SizeToContent();








MFC Tab Control Color Change #2

Programming/MFC 2016. 10. 18. 10:57 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC Tab Control Color Change #2





Change Tab Selector? Color




override DrawItem function




void CMainTabCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

	COLORREF m_select_border_color = RGB(255, 255, 255);
	COLORREF m_select_text_color = RGB(10, 155, 202);
	COLORREF m_unselect_border_color = RGB(255, 255, 255);
	COLORREF m_unselect_text_color = RGB(0, 0, 0);


	int select_index = lpDrawItemStruct->itemID;
	if (select_index < 0) return;

	char tab_text[40];

	TC_ITEM data;
	data.mask = TCIF_TEXT | TCIF_IMAGE;
	data.pszText = tab_text;
	data.cchTextMax = 39;

	// 선택된 탭의 정보를 얻는다.
	if (!GetItem(select_index, &data)) return;

	CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect rect = lpDrawItemStruct->rcItem;

	// Tab이 그려진 테두리의 두께만큼 위치를 보정한다.
	rect.top += ::GetSystemMetrics(SM_CYEDGE);

	pDC->SetBkMode(TRANSPARENT);

	// 탭이 선택된 정보에 따라 배경색을 칠해준다.
	if (select_index == GetCurSel()) pDC->FillSolidRect(rect, m_select_border_color);
	else pDC->FillSolidRect(rect, m_unselect_border_color);

	// 이미지를 출력한다.
	CImageList *p_image_list = GetImageList();
	if (p_image_list != NULL && data.iImage >= 0) {
		rect.left += pDC->GetTextExtent(" ").cx;

		IMAGEINFO image_info;
		p_image_list->GetImageInfo(data.iImage, &image_info);
		CRect image_rect(image_info.rcImage);

		p_image_list->Draw(pDC, data.iImage, CPoint(rect.left, rect.top), ILD_TRANSPARENT);
		rect.left += image_rect.Width();
	}

	CFont *p_old_font = NULL;

	if (select_index == GetCurSel()){
		// 선택된 탭이라면...
		pDC->SetTextColor(m_select_text_color);

		// 텍스트의 위치를 보정하여 선택된 느낌이 강조되도록 만든다.
		rect.top -= ::GetSystemMetrics(SM_CYEDGE);
		pDC->DrawText(tab_text, rect, DT_SINGLELINE | DT_VCENTER | DT_CENTER);
	}
	else {
		// 선택되지 않은 탭이라면...
		pDC->SetTextColor(m_unselect_text_color);
		pDC->DrawText(tab_text, rect, DT_SINGLELINE | DT_BOTTOM | DT_CENTER);
	}

	pDC->SelectObject(p_old_font);
}




그리고


DrawItem 이벤트를 발생시키기 위하여



Dialog 에서






m_TabCtrl.ModifyStyle(0, TCS_OWNERDRAWFIXED);


를 불러 주어야 한다.

MFC Tab Control Color Change #1

Programming/MFC 2016. 10. 18. 10:34 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

MFC Tab Control Color Change


Erase Background


Tab Control 의 배경 부분의 색상을 선택 할 수 있다.










TabControl 을



CTabCtrl 을 상속 받는 별개의 클래스로 구현하여




 

BEGIN_MESSAGE_MAP(CMainTabCtrl, CTabCtrl)

      ON_WM_ERASEBKGND()

END_MESSAGE_MAP()





메세지 맵에 추가한 후










BOOL CMainTabCtrl::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

	CRect rect;

	GetClientRect(&rect);

	CBrush myBrush(RGB(255, 255, 255));    // dialog background color <- 요기 바꾸면 됨.

	COLORREF color_data = RGB(64, 128, 255);


	CBrush *pOld = pDC->SelectObject(&myBrush);

	BOOL bRes = pDC->PatBlt(0, 0, rect.Width(), rect.Height(), PATCOPY);

	pDC->SelectObject(pOld);    // restore old brush

	return bRes;                       // 	return CTabCtrl::OnEraseBkgnd(pDC);
}