본문 바로가기

MFC

메뉴의 체크표시 변환 C++, MFC void CMainFrame::OnUpdateWindow3(CCmdUI* pCmdUI) { // TODO: Add your command update UI handler code here if(m_nWindowNum==3) pCmdUI->SetCheck(TRUE); else pCmdUI->SetCheck(FALSE); } 구글에서 검색해보면 대부분 이런식으로 SetCheck 를 사용하는 것들에 대한 글이 대다수이다. 하지만 이 방식은 대화상자를 특정 방식으로 생성했을 때에만 작동하며 그 이외에는 작동하지 않는다. 이럴때에 CMenu *hMenu = GetMenu(); if(hMenu->GetMenuState(해당 메뉴의 아이디, MF_BYCOMMAND) != MF_CHECKED){ hMenu->Check.. 더보기
어처구니 없는 실수 회사일 도중 어처구니 없는 실수가 있어서 적는 글. 혼자 제작중인 프로그램에서 파일의 내용을 구조체로 저장하고 구조체를 변환하여 다른 타입의 구조체로 구성된 파일로 저장하는 프로그램을 만들고 있다. 이름을 바꾸는데 TCHAR에서 BYTE로 바꿀때엔 함수를 여럿 사용한 반면 타 프로그램의 원문을 보니 BYTE에서 TCHAR로 바꾸는 것은 그냥 대입하면 되었기에 그대로 실행하는데 계속 다른값이 저장되는 것이다. 6시간동안 헤메다가 아무리 해도 값이 안바뀌어서 저장값들을 다 지워버리고 해도 그대로 박히길래 뭔가 이상한걸 눈치챘고.. 원인은 바로 file.Write의 매개변수값에 있었다. 해당 구조체와 구조체 타입을 다른 구조체로 집어넣었기 때문이었다. 아. 멘붕. 그걸 고치니 바로 정상적으로 작동하기 시작하였.. 더보기
MFC 프로그래밍에서 printf 함수를 출력하는 방법 비쥬얼 스튜디오 2008에서 MFC 프로그래밍을 하게되면, stdafx.cpp 파일이 프로젝트 내에 존재하게 된다. 이 파일에 아래의 내용만 추가해주면 된다. #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") 다시 보이지 않게하려면 주석처리를 하던가 해당 문구를 삭제하면된다. 해당 문구 만 집어넣은 상태의 stdafx.cpp파일은 다음과 같은 코딩이 되어있을 것이다. // stdafx.cpp : 표준 포함 파일만 들어 있는 소스 파일입니다. // TRANS.pch는 미리 컴파일된 헤더가 됩니다. // stdafx.obj에는 미리 컴파일된 형식 정보가 포함됩니다. 더보기
콤보박스 사용 함수. GetLBText 먼저 GetLBText의 원형 부터 보자.int GetLBText( int nIndex, LPTSTR lpszText ) const; void GetLBText( int nIndex, CString& rString ) const; 그러하다. 콤보박스와 리스트박스는 함수명만 다르고 하는짓이 같음. 을 눈치챌 수 있다. X번째 의 인덱스에 해당하는 콤보박스의 스트링 문자열을 가져오는 함수이다. void CListComboDemoDlg::OnLbnSelchangeList1() { int nIndex = m_List.GetCurSel(); if(nIndex != LB_ERR) { m_List.GetText(nIndex, m_strSelected); UpdateData(FALSE); } } 이 부분을 Update.. 더보기
error C2440: '=' : 'const char [23]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. 이런 에러가 뜨면 문자열 을 _T() 안에 집어넣어 한번 해보는게 좋다. 다른 방법인 프로젝트의 속성을 바꾼다는 등 으로 하면 다른 코드의 처리도 바뀌고 결국 해결이 안되므로 저 방법이 그나마 제일 좋다. 비쥬얼 스튜디오 2008에서 생겼던 에러. 더보기