반응형

프로그래밍/MFC/WIN32 5

IOCP를 이용한 OVERLAPPED 사용시 ErrorCode(6) 관련

IOCP OVERLAPPED사용할 경우 랜덤적으로 WSARecv 또는 WSASend 동작시 Error Code 6 일 발생하는 경우가 있다. 이것은 Overlapped 구조체의 hEvent 변수를 초기화하지 않고 사용해서 발생하는 것으로 해당 변수를 NULL 로 초기화해서 사용할 경우 발생하지 않는다. 아래의 경우에는 내가 사용했던 경우이다. 나중에 혹시 다시 발생하면 참고할 수 있도록 하자. class CROverlapped : public OVERLAPPED, public CRObject { public: E_TYPE_OVERLLAPED eType; std::shared_ptr m_ClntInfo; CROverlapped() { m_ClntInfo = nullptr; hEve..

MFC 에서 마우스 클릭을 비활성화 하는 방법

MFC에서 마우스 클릭 비활성화하는 방법 void CExmaplDlg::OnDisableMouseButton() { CRect rect; GetWindowRect(rect); ClipCursor(&rect); ShowCursor(FALSE); ::SetCapture(m_hWnd); } void CExampleDlg::OnEnableMouse() { ShowCursor(TRUE); ClipCursor(NULL); ::ReleaseCapture(); } 보통 마우스를 비활성화시켰을 경우 Ctrl + Alt + Del 키를 이용하여 다시 동작 가능하도록 한다. 특정 동작이나 수행하는 동안 마우스 입력을 제한해야 할 경우 사용하면 될 듯 싶다.

Visual studio 디버그 빌드 배포시 종속 DLL 위치

테스트나 다른 어떤 이유에서 디버그 빌드를 배포하여 사용할 경우가 있다. 가장 빈번한 이유는 다른 곳에서 디버깅 필요가 있을 경우가 제일 많을 것이다. 릴리즈는 MS에서 VS 마다의 재배포 패키지를 인터넷을 통해 배포 중이기에 쉽게 설치가 가능하나 디버그 같은 경우에는 따로 제공되지 않고 있다. 이전에는 윈도우의 DLL 디렉토리에 위치해있는 것을 하나 하나 찾았는데 그럴필요 없이 VS 설치폴더에 가면 잘 정리되어 있다. 다음은 예를들어 VS2013 일 때의 경로이다. 위 이미지의 경로를 보면 Program Files (x86)\Microsoft Visual Studio 12.0\VC\redist\Debug_NonRedist 위치에 플랫폼 별로 DLL이 위치해 있다. 해당 폴더 내 DLL 을 가져다 실행파..

MFC 현재 윈도우 폰트 속성

현재 윈도우의 폰트 속성을 알고 싶을 경우가 있다. 폰트 속성을 알아아내기 위해서는 다음 코드를 보자. BOOL TestDlg::OnInitDialog() { LOGFONT lf; CDialogEx::OnInitDialog(); //생략 m_bigfont.CreatePointFont(200, "굴림"); GetDlgItem(IDC_EDIT)->SetFont(&m_bigfont); GetFont()->GetLogFont(&lf); lf.lfItalic = TRUE; // 주어진 로그 폰트 속성을 이용하여 폰트를 생성한다. m_stylefont.CreateFontIndirect(&lf); GetDlgItem(IDC_EDIT)->SetFont(&m_stylefont); //생략 return TRUE; } 위 ..

MFC 다이얼로그(Dialog) 스크롤(Scroll) 적용

MFC에서 다이얼로그에 스크롤을 적용하기 위한 코드를 보도록 하자. 우선 리소스에디터에서 해당 다이얼로그의 속성 중 Border 를 Resizing 으로 수정해 놓아야 한다. 그 이후 필요한 것은 크기 변동 이벤트 시 적절한 대응과 스크롤 발생 이벤트 시 적절한 행동을 수행하는 것이다. 우선 WM_SIZE 이벤트에 대한 처리를 진행하자. void TestDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); UpdateScrollInfo(cx, cy); } void TestDlg::UpdateScrollInfo(int cx, int cy) { int nScrollMaxV = 0; int nScrollMaxH = 0; int ..

반응형