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);
}



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

MFC Grid control 2.27 DragAndDrop Error








가끔씩 Grid 컨트롤 내의 셀을 컨트롤 밖으로 드래그앤드랍을 하게 되면 에러가 발생한다.






EnableDragRowMode(FALSE);



으로 설정해주니





해당 에러가 발생하지 않는다.






CDateTimeCtrl 사용법

Programming/C,CPP,CS 2016. 8. 25. 17:56 Posted by TanSanC
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

CDateTimeCtrl 사용법



이름

설명

CDateTimeCtrl::CloseMonthCal

현재 날짜 및 시간 선택 컨트롤을 닫습니다.

CDateTimeCtrl::Create

날짜 및 시간 선택 컨트롤을 만들고이에 연결 된 CDateTimeCtrl 개체입니다.

CDateTimeCtrl::GetDateTimePickerInfo

현재 날짜 및 시간 선택 컨트롤에 대 한 정보를 검색합니다.

CDateTimeCtrl::GetIdealSize

현재 날짜나 시간을 표시 하는 데 필요한 시간 및 날짜 선택 컨트롤의 이상적인 크기를 반환 합니다.

CDateTimeCtrl::GetMonthCalColor

월 달력에서 날짜 및 시간 선택 컨트롤의 특정된 부분에 대 한 색을 검색합니다.

CDateTimeCtrl::GetMonthCalCtrl

검색은 CMonthCalCtrl 개체의 날짜 및 시간 선택 컨트롤에 연결 합니다.

CDateTimeCtrl::GetMonthCalFont

현재 날짜 및 시간 선택 컨트롤의 자식 컨트롤에서 사용 되는 글꼴을 검색 합니다.

CDateTimeCtrl::GetMonthCalStyle

현재 날짜 및 시간 선택 컨트롤의 스타일을 가져옵니다.

CDateTimeCtrl::GetRange

현재 최소 및 최대 허용 시스템 시간 날짜 및 시간 선택 컨트롤을 검색 합니다.

CDateTimeCtrl::GetTime

날짜 및 시간 선택 컨트롤에서 현재 선택한 시간을 검색 하 고 지정 된 배치 SYSTEMTIME 구조.

CDateTimeCtrl::SetFormat

지정 된 형식 문자열에 따라 날짜 및 시간 선택 컨트롤의 표시를 설정합니다.

CDateTimeCtrl::SetMonthCalColor

월 달력에서 날짜 및 시간 선택 컨트롤의 특정된 부분에 대 한 색을 설정합니다.

CDateTimeCtrl::SetMonthCalFont

날짜 및 시간 선택 컨트롤의 자식 컨트롤을 사용 하는 글꼴을 설정 합니다.

CDateTimeCtrl::SetMonthCalStyle

현재 날짜 및 시간 선택 컨트롤의 스타일을 설정합니다.

CDateTimeCtrl::SetRange

날짜 및 시간 선택 컨트롤에 대 한 최소 및 최대 허용 된 시스템 시간을 설정합니다.

CDateTimeCtrl::SetTime

날짜 및 시간 선택 컨트롤에는 시간을 설정합니다.




// set with a CTime
CTime timeTime(1998, 4, 3, 0, 0, 0);
VERIFY(m_DateTimeCtrl.SetTime(&timeTime));

// set with a COleDateTime object
COleDateTime oletimeTime(1998, 4, 3, 0, 0, 0);
VERIFY(m_DateTimeCtrl.SetTime(oletimeTime));

// set using the SYSTEMTIME
SYSTEMTIME sysTime;
memset(&sysTime, 0, sizeof(sysTime));
sysTime.wYear = 1998;
sysTime.wMonth = 4;
sysTime.wDay = 3;
VERIFY(m_DateTimeCtrl.SetTime(&sysTime));
void CDateTimeDlg::OnBnClickedTimebutton()
{
   // get as a CTime
   CTime timeTime;
   DWORD dwResult = m_DateTimeCtrl.GetTime(timeTime);
   if (dwResult == GDT_VALID)
   {
      // the user checked the box and specified data
      CString str;

      // is it a time-only control, or a date-only control?
      if ((m_DateTimeCtrl.GetStyle() & DTS_TIMEFORMAT) == DTS_TIMEFORMAT)
         str = timeTime.Format(_T("%X"));
      else
         str = timeTime.Format(_T("%x"));
      AfxMessageBox(str);
   }
   else
   {
      // the user unmarked the "none" box
      AfxMessageBox(_T("Time not set!"));
   }

   // Calling as SYSTIME is much the same, but calling for a COleDateTime
   // has us test the state of the COleDateTime object for validity to 
   // see if the user did or didn't check the "none" box.
}











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

MFC Grid control 2.27 ReadOnly, CheckBox Button





// Make cell row,col read-only

m_Grid.SetItemState(row, col, m_Grid.GetItemState(row, col) | GVIS_READONLY);





// Make cell row,col CheckBox Button

m_Grid.SetCellType(row, col, RUNTIME_CLASS(CGridCellCheck));











http://www.codeproject.com/Articles/8/MFC-Grid-control-2-27