MFC에서 버튼에 그림을 입힐 수 있다.
보통 사용하는 CButton을 대신해 CBitmapButton으로 변수를 선언하여 주면 버튼에 이미지를 입히는것이 가능하며, 버튼의 상태(눌렀을때, 포커스가 갔을때 등)에 따라 이미지를 달리 줄 수 있다.
버튼에 이미지를 입힐때는 LoadBitmaps()를 사용하면 된다.
LoadBitmaps는 4가지 Argument를 사용한다.
cbitmapButton.LoadBitmaps(일반, 눌렀을때, 포커스가 갔을때, 사용안함일때)
MSDN(http://msdn.microsoft.com/ko-kr/library/6y6acs49.aspx)
2014년 7월 29일 화요일
Debugging information cannot be found or does not match.... 이 발생할때
pdb나 exe파일이 매칭이 안될때 발생한다.
이럴때는 프로젝트를 clean하거나 rebuild하거나 vs를 껏다키면 되드라
이럴때는 프로젝트를 clean하거나 rebuild하거나 vs를 껏다키면 되드라
2014년 7월 24일 목요일
[MFC] 화면다시그리기(갱신?): Invalidate()
강제로 화면을 다시 그리는 함수다.
Invalidate(TRUE) //화면전체
Invalidate(FALSE) //변경된 부분만
컨트롤의 이동이나 크기의 변경이 있을때는 그뒤에 추가해주자
MSDN
Invalidate(TRUE) //화면전체
Invalidate(FALSE) //변경된 부분만
컨트롤의 이동이나 크기의 변경이 있을때는 그뒤에 추가해주자
MSDN
[MFC] 컨트롤 크기, 위치 변경
MFC에서 컨트롤을 생성하고 컨트롤의 위치를 변경하고 싶을경우 MoveWindow() 함수를 사용한다.(http://msdn.microsoft.com/ko-kr/library/5bc5w1zz.aspx)
msdn에 위 함수를 사용할때 필요한 매개변수들이 설명되 있다.
나는 CRect()을 사용해서 위치와 크기를 변경하는것을 선호한다. 왠지 이게 편하다.
MovieWindow(CRect(Cpoint(p_x, p_y),CSize(width, height)));
이렇게 하면 컨트롤의 왼쪽 가장위 모서리를(Cpoint)로 위치를 결정하고 폭과 높이(CSize)를 통해 크기를 결정한다.
MFC에서 다이얼로그에 컨트롤를 생성할때 쉽게 Toolbox에서 Drag&Drop해서 직접 크기와 위치를 정해줄 수 있지만 Code에서 MovieWindow()같은 함수를 사용하여 크기와 위치를 정의하는 것이 더 좋을것같다.
그리고 컨트롤의 위치와 크기를 변경한 후에는 Invalidate();를 마지막에 해주자
msdn에 위 함수를 사용할때 필요한 매개변수들이 설명되 있다.
나는 CRect()을 사용해서 위치와 크기를 변경하는것을 선호한다. 왠지 이게 편하다.
MovieWindow(CRect(Cpoint(p_x, p_y),CSize(width, height)));
이렇게 하면 컨트롤의 왼쪽 가장위 모서리를(Cpoint)로 위치를 결정하고 폭과 높이(CSize)를 통해 크기를 결정한다.
MFC에서 다이얼로그에 컨트롤를 생성할때 쉽게 Toolbox에서 Drag&Drop해서 직접 크기와 위치를 정해줄 수 있지만 Code에서 MovieWindow()같은 함수를 사용하여 크기와 위치를 정의하는 것이 더 좋을것같다.
그리고 컨트롤의 위치와 크기를 변경한 후에는 Invalidate();를 마지막에 해주자
2014년 7월 18일 금요일
[MFC] Plug-In 만들기1
MFC에 Add-In(Plug-In)기능을 만들어 보자.
MFC로 개발하면서 이클립스 같은 Plug-In기능을 구현해 보려고 한다.
http://www.codeproject.com/Articles/2489/Plug-In-framework-using-DLLs
에 올라온 예제 코드를 참조하여 구현해 볼것이다. 설명도 제법 잘 써놨다. 10년도 더된 코드지만 아무것도 모르는 나에게는 매우 유용한 소스코드다.
위에 따르면 프로그램은 다음과 같은 과정을 거친다.
MFC로 개발하면서 이클립스 같은 Plug-In기능을 구현해 보려고 한다.
http://www.codeproject.com/Articles/2489/Plug-In-framework-using-DLLs
에 올라온 예제 코드를 참조하여 구현해 볼것이다. 설명도 제법 잘 써놨다. 10년도 더된 코드지만 아무것도 모르는 나에게는 매우 유용한 소스코드다.
위에 따르면 프로그램은 다음과 같은 과정을 거친다.
- The main app is initialized (i.e. started)
- The DLLs/Plug-Ins are searched in the directory (may be pre-determined)
- Once "valid" DLLs are found, all or selected DLLs are loaded
- "Init" function is invoked on all loaded DLLs
- The instance and the DLL name/path are cached for future use (method invocation)
- User uses the functionality of the DLLs (using GUI interfaces provided by the DLLs)
- Once done, the main application invokes "Destroy" function of the DLLs one by one to free resources
- The main application exits
마지막에 하는 말이 간단하다고 한다..ㅡㅡ 난 왜이리 낯설고 어렵운지 MFC의 경험이 많지 않아서 (C++ 포함) 그런지 매우어렵다. 프로그램이 대충 어찌 돌아야 하는지 알았으니 예제 따라 구현해봐야지~~
2014년 7월 17일 목요일
[MFC] SDI 에서 (MENU) 없에기
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style &= ~FWS_ADDTOTITLE;
cs.hMenu = NULL; //요놈을 추가한다.
return TRUE;
}
'cs.hMenu = NULL;'을 추가하고 디버깅시 assertion failed이 날때
ON_WM_CREATE()
static UINT indicators[] =
ON_WM_CREATE()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
if (!m_wndstatusbar.create(this))
{
trace0("failed to create status bar\n");
return -1; // fail to create
}
m_wndstatusbar.setindicators(indicators, sizeof(indicators)/sizeof(uint));
m_wndstatusbar.setindicators(indicators, sizeof(indicators)/sizeof(uint));
위의 코드들을 주석또는 삭제
피드 구독하기:
글 (Atom)