본문 바로가기

MFC36

MFC DLL, EXE에 버전 정보 header 파일로 분리 관리 1. 프로젝트에 존재하는 *.rc 파일을 코드 보기로 읽는다. 아래와 같은 버전 관리 리소스를 확인 할 수 있다. ///////////////////////////////////////////////////////////////////////////// // // Version // VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L #else FILEFLAGS 0x0L #endif FILEOS 0x40004L FILETYPE 0x2L FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "04.. 2022. 4. 4.
MFC Dialog 최상위 스크린 가운데 표시 아래와 같이 소스를 작성해서 추가한다. int cx = ::GetSystemMetrics(SM_CXSCREEN); int cy = ::GetSystemMetrics(SM_CYSCREEN); CRect rt; GetClientRect(rt); cx = (cx - rt.Width()) / 2; cy = (cy - rt.Height()) / 2; ::SetWindowPos(this->m_hWnd, HWND_TOPMOST, cx, cy, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW); 2022. 4. 4.
RichEdit20를 사용할 때 주의 사항 dll로 dialog를 띄우는 것을 만들었는데 계속 dll doModal이 -1을 리턴해서 엄청 고생을 했다. dll에서 doModal을 띄우기 위해서는 처리하는 함수 시작과 함께 AFX_MANAGE_STATE(AfxGetStaticModuleState()); 위의 구문을 추가해야 한다. 추가했지만 작동이 되지 않는다. 결국 component 초기화 문제였다. RichEdit20 component를 사용하기 위해서는 InitInstance() 함수에 AfxInitRichEdit(); 위의 함수를 추가해야만 한다. 2022. 4. 4.
AfxGetMainWnd() 함수 NULL 리턴 문제 CMainFrame* pFrm = (CMainFrame *)AfxGetMainWnd(); 기존에 잘 사용했는데 갑자기 pFrm이 NULL로 리턴되는 문제가 발생했다. 검색을 해 보니 이런 문제로 올라온 글이 있어서 수정을 했다. 이전과 달라진 부분을 확인해 보니 기존에 OnTimer에서 호출하던 함수를 성능 개선을 위해 Thread를 만들어서 호출하도록 변경을 했다. 이것 때문에 문제가 발생한 것으로 보인다. 아래와 같은 방식으로 사용을 하면 NULL로 리턴을 하지 않는 것을 확인했다. CMainFrame* pFrm = (CMainFrame *)AfxGetApp()->GetMainWnd(); https://frostguy.tistory.com/37 2019. 12. 12.
Switch MDI Active MDI에서 ChildForm이 여러개 존재하는데 그 ChildForm을 사용자가 Active로 변경하고 싶을 경우가 있다. 여러개의 Sub Dialog가 열린 상태에서 Dialog를 선택하면 그 Dialog의 ChildForm이 Active 되게 처리를 해야 하는데 이럴 경우에 MFC에서는 WM_MDIACTIVATE 메시지를 이용해서 처리를 할 수가 있다. 1. 먼저 Sub Dialog에서 포커스를 확인 하는 방법은 OnActivate을 이용한다. - MessageMap에 WIM_ONACTIVATE을 추가한다. - Dialog의 virtual 함수인 OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)를 추가한다. 2. OnActivate함수에서 nSta.. 2019. 11. 15.
Ethernet Status Check WinAPI 참조) https://docs.microsoft.com/ko-kr/windows/win32/api/netioapi/nf-netioapi-getifentry2 GetIfEntry2 function (netioapi.h) Retrieves information for the specified interface on the local computer. docs.microsoft.com https://msdn.microsoft.com/zh-tw/visualc/aa365917(v=vs.90) GetAdaptersInfo function (Windows) The GetAdaptersInfo function retrieves adapter information for the local computer. On Wind.. 2019. 7. 2.
AFX_MANAGE_STATE(AfxGetStaticModuleState()); MFC에서 동적 DLL을 만들고 Dialog 등을 만들어 사용할 때 DLL 함수의 첫 라인에 이 매크로 함수를 써야 한다. 예들들어 Sample Dialog를 만들어 DoModal()로 화면에 표시를 하려고 하는데 DoModal()이 -1로 리턴하며 화면에 표시되지 않는 경우를 확인 할 수 있다. 원인을 찾지 못하다가 타 소스를 참조해서 확인했다. 맨처음 제작했을 때에는 아래와 같이 만들었었다. int ShowSampleDlg() ///< DLL 함수 { CSampleDlg dlg(); int nReturn = dlg.DoModal(); if( nReturn == IDOK ) { } else if( nReturn == IDCANCEL ) { } return nReturn; } 그런데 dlg.DoModal.. 2019. 5. 17.
MFC Error C2248 (CSocket 상속 클래스 사용할 때 에러 발생) 보호되어 있는 글 입니다. 2019. 5. 3.
MFC 투명 툴바, 아이콘 제작 방법 MFC 투명한 툴바, 아이콘 만들기 32비트 BMP 이미지를 만든다. 포토샵에서 채널 정보를 보면 알파 채널이 존재한다. 펜을 선택하고 바탕색을 Black(0,0,0)으로 변경 한다. 투명으로 처리하고 싶은 부분에 색칠을 한다. 아래 이미지에서 붉은 색으로 표시되는 부분이 Black으로 칠한 영역이다. 이 부분이 툴바, 아이콘에서 투명으로 표시된다. White(255,255,255)으로 칠을 하면 표시되는 영역이 된다. 채널 레이어를 선택하고 작업해야 한다. 2018. 7. 10.
LIST