본문 바로가기

전체 글319

QT Plugins 폴더 Windows 배포 문제 이번에 작업을 하면서 QT가 설치 되지 않는 컴퓨터에서는 DLL을 모두 포함해서 배포를 해서 실행 해도 프로그램이 강제 종료되는 문제가 발생했다. 원인을 파악한 결과 Plugins 폴더를 함께 배포하지 않아서 발생한 것으로 확인 되었다. 그러나 문제는 Plugins 폴더를 실행 파일과 같은 경로에 추가해도 정상 작동을 하지 않는 것이다. 빌드를 할 때 Plugins 폴더 위치가 배포되는 컴퓨터에도 같은 위치에 존재해야만 정상 작동하는 것을 확인 했다. 빌드 할 때 관련 내용이 실행 파일에 포함되기 때문에 문제를 수정하기 위해서는 아래와 같이 소스에 추가를 해야 한다. QApplication a(argc, argv); #if defined(Q_OS_WIN32) //Windows 배포할 때 필요하다. a.a.. 2020. 7. 24.
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.
View Background Color(배경색) 변경하기 Background color of CView window구글 검색을 해보니 OnEraseBkgnd()함수를 사용하면 된다고 한다. 헤더에 함수를 선언하다. virtual BOOL OnEraseBkgnd(CDC* pDC); 소스의 메시지맵에 추가를 하고 함수를 아래와 같이 처리한다.ON_WM_ERASEBKGND() 배경색을 Button Face로 지정을 했다. BOOL CTestView::OnEraseBkgnd(CDC* pDC){// Get client areaCRect rc;GetClientRect(&rc); // Create grey brush and insert it into DCDWORD btnColor = GetSysColor(COLOR_BTNFACE);CBrush brush(RGB(GetRVa.. 2018. 6. 22.
Detect a CListCtrl selection change 구글을 검색해서 찾은 내용이다.LVN_ITEMCHANGED 메시지를 이용해서 확인할 수 있다. BEGIN_MESSAGE_MAP(CDlgTest, CDialog) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST, OnItemChangedList)END_MESSAGE_MAP() /* ... */ void cDlgRun::OnItemChangedList(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if ((pNMListView->uChanged & LVIF_STATE) && (pNMListView->uNewState & LVIS_SELECTED)) { int selected_item_ind.. 2018. 6. 18.