2 분 소요

  1. Dialog 전체화면 만들기
     ShowWindow(SW_SHOWMAXIMIZED);
    
  2. 글자 색 변경 방법

1) 클래스 마법사에서 WM_CTLCOLOR 실행 2) 생성된 함수 OnCtlColor 에서

3) 해당 코드 입력


HBRUSH Clss_Dialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	switch (nCtlColor)
	{
	case CTLCOLOR_BTN:
		pDC->SetBkColor(RGB(0, 0, 0));
		return (HBRUSH)GetStockObject(NULL_BRUSH);

	case CTLCOLOR_STATIC:
		/* 변동하지 않는것 정리*/
		//if (pWnd->GetDlgCtrlID() == IDC_STATIC_Title)
		//{
		//	return hbr;
		//}

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

		return (HBRUSH)GetStockObject(NULL_BRUSH);
	default:
		return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	}
	// TODO:  기본값이 적당하지 않으면 다른 브러시를 반환합니다.
	return hbr;
}

  1. 마우스 좌표 구하기
	POINT ptOld;                // previous cursor location 
	::GetCursorPos(&ptOld);
  1. 버튼 입력 차단하기

1) 클래스 마법사에서 가상함수에 PreTranslateMessage실행 2) 생성된 함수 PreTranslateMessage 에서

3) 해당 코드 입력

BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_RETURN) // ENTER키 눌릴 시
			return TRUE;
		else if (pMsg->wParam == VK_ESCAPE) // ESC키 눌릴 시
			return TRUE;
		else if (pMsg->wParam == VK_SPACE) // VK_SPACE키 눌릴 시
			return TRUE;

	}
  1. 체크박스 활용하기

체크박스는 클래스 마법사가 없다.

  1. 체크박스 UI 추가후 첫 시작 체크박스에 그룹 True 값으로 변경하기

  2. 메세지 기능 추가하기 ```cpp BEGIN_MESSAGE_MAP(Class_DLG, CDialogEx) … ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO_1, IDC_RADIO_2,&Class_DLG::OnRangeRadioGroup1) // ON_CONTROL_RANGE(이벤트, 첫위치, 마지막 위치,&Class_DLG::동작 함수) … END_MESSAGE_MAP()

2. 동작 함수 작성하기

```cpp
void Class_DLG::OnRangeRadioGroup1(UINT uID)
{
	switch (uID)
	{
	case IDC_RADIO_1:
		i_CheckBOx = 1;  // 이벤트 내용 넣으면 된다.
		break;
	case IDC_RADIO_2:
		i_CheckBOx = 2;
		break;
	}
}

참고

	((CButton*)GetDlgItem(IDC_RADIO_2))->SetCheck(TRUE);	 체크하기 
  1. 리소스 가져오기
	CBitmap bmp_background;
	bmp_background.LoadBitmap(IDB_BITMAP_BLACK);
	BITMAP bmap;
	bmp_background.GetBitmap(&bmap);
 
	int Width = bmap.bmWidth; 
	int Height = bmap.bmHeight;
     
	int nChannels = bmap.bmBitsPixel == 1 ? 1 : bmap.bmBitsPixel / 8;
	int depth = bmap.bmBitsPixel == 1 ? IPL_DEPTH_1U : IPL_DEPTH_8U;
 
	BYTE *pBuffer = new BYTE[bmap.bmHeight*bmap.bmWidth*nChannels];
	GetBitmapBits((HBITMAP)bmp_background.GetSafeHandle(), bmap.bmHeight*bmap.bmWidth*nChannels, pBuffer);
 
	cv::Mat Channel4Mat(bmap.bmHeight, bmap.bmWidth, CV_MAKETYPE(depth, nChannels));
	memcpy(Channel4Mat.data, pBuffer, bmap.bmHeight*bmap.bmWidth*nChannels);
 
	cv::Mat Channel3Mat(bmap.bmHeight, bmap.bmWidth*nChannels, CV_8UC3);
	// convert color   
     
	cvtColor(Channel4Mat, Channel3Mat, COLOR_BGRA2BGR);
 
	cv::imshow("test", Channel3Mat);
	cv::waitKey(0);
 
	delete[] pBuffer;
	pBuffer = NULL;
  1. 폴더 내부 폴더생성
#include <string.h>
#include <sys/stat.h>

#define BUFF 1024

void mkdirs(char *dir_path){
	
    char buff[BUFF];
    char *p_dir = buff;        // 포인터를 문자열 처음으로
     
    strcpy(buff, dir_path);     // copy the path of the directory
    
    buff[BUFF-1] = '\0';
    
    while(*p_dir){
    	if('/'== *p_dir){   
            *p_dir = '\0';     // 잠시 문자열의 끝으로 설정 
            mkdir(buff, 0777); //
            *p_dir = '/';      // 문자열 원래대로 복귀
        }
        p_dir ++;
    }
}
  1. 글자 폰트 크기
CFont m_font; //전역 변수로 선언해야함


   m_font.CreateFont( 100, // nHeight
                               80, // nWidth
                               0, // nEscapement
                               0, // nOrientation
                               1, // nWeight
                               0, // bItalic
                               0, // bUnderline 
                               0, // cStrikeOut 
                               0, // nCharSet
                               OUT_DEFAULT_PRECIS, // nOutPrecision 
                               0,                              // nClipPrecision 
                               DEFAULT_QUALITY,       // nQuality
                               DEFAULT_PITCH | FF_DONTCARE,  // nPitchAndFamily 
                               "굴림" ); // lpszFacename

m_edit1.SetFont(&m_font, TRUE);
GetDlgItem(IDC_EDIT1)->SetFont(&m_font);

9. 메세지 박스 여러개 옵션

```cpp
	int result = MessageBox("프로그램 종료 하시겠습니까", "알림", MB_YESNOCANCEL | MB_ICONWARNING);
	if (result == IDYES)
	{
		::SendMessage(this->m_hWnd, WM_CLOSE, NULL, NULL);
	}
	else if (result== IDNO)
	{

	}
	else if (result== IDCANCEL)
	{

	}

10 Postmeessage 인자 같이 보내기

문자열 인자 넘기기
	CString *pstrString = new CString(strString); //new 해야함.
	::PostMessage(hWnd, UM_MY_MESSAGE, (WPARAM)0, (LPARAM)pstrString);
LRESULT	CMyClass::OnMyMessage(WPARAM wParam, LPARAM lParam)
{
	CString* pstrString = (CString*)lParam;
	CString strString= pstrString->GetString();
	//TODO : .........................
	return 0;
}

11 화면 버튼 기능 막는 기능

BOOL CMFC_Camera_Dlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_RETURN) // ENTER키 눌릴 시
			return TRUE;
		else if (pMsg->wParam == VK_ESCAPE) // ESC키 눌릴 시
			return TRUE;
		else if (pMsg->wParam == VK_SPACE) // VK_SPACE키 눌릴 시
			return TRUE;

	}

	return CDialogEx::PreTranslateMessage(pMsg);
}


  • 참고 링크
    1. Dialog 전체화면 만들기 관련 참고 링크 https://godtory.tistory.com/27
    2. 마우스 좌표 구하기 https://learn.microsoft.com/en-us/windows/win32/menurc/using-cursors
    3. 라디오 버튼 https://eskeptor.tistory.com/172
  1. 라소스 가져오기 https://ddorobot.tistory.com/entry/CBitmapBITMAP-or-HBITMAP%EC%97%90%EC%84%9C-cvMat%EC%9C%BC%EB%A1%9C-%EB%B3%80%ED%99%98

  2. 폴더 내부 https://m31phy.tistory.com/143

  3. 글자 폰트 크기 https://starfactory.tistory.com/85

  4. 메세지 박스 https://blog.naver.com/PostView.naver?blogId=rjseorl95&logNo=221707687230 https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-messagebox

  5. POSTMEAAAGE

https://seowoozzang.tistory.com/13

댓글남기기