2017년 5월 31일 수요일

릴리즈로 만든 프로그램을 돌리다 죽는경우 디버그 방법 (Visual Studio 2010 *.dmp 파일 분석)

릴리즈로 만든 프로그램을 돌리다 죽는경우 디버그 방법

1. Process Explorer를 사용해서 dmp 파일을 만듬

2. Visual studio 2010에서 그래시 메모리 덤프 파일 열기

3. 심볼 정보 설정

4. 디버깅

https://support.microsoft.com/ko-kr/help/2268212

2017년 4월 18일 화요일

MFC ListCtrl Header back color

1.1 CHeaderCtrl를 상속받은 클래스를 생성한다.
1.2 Class view에서 OnEraseBkgnd, OnNMCustomdraw를 추가한다.
1.3 OnEraseBkgnd는 return FALSE; 한다.

2.1 CListCtrl를 상속받은 클래스를 생성한다.
2.2 PreSubclassWindow()를 추가한다.
2.3 2.1에서 만든 클래스에 1.1에서 만든 크래스를 멤버 변수로 추가한다.
2.4 2.2함수에 m_listHeader.SubclassWindow(::GetDlgItem(m_hWnd, 0)); 요로코롬 추가한다.

3.1 1.2 에서 만든 OnNMCustomdraw() 함수에 그리기를 한다.

MyListHeader.h/MyListHeader.cpp

[참조]http://pingfan.egloos.com/7450045

2017년 4월 17일 월요일

MFC Modeless delete

Ddialog를 지역변수로 Modeless로 생성할때 삭제를 하려면

1. OnClose()를 추가
CDialog::OnClose(); 요건 지움
void CTestDlg::OnClose()
{
  // TODO: Add your message handler code here and/or call default
if( m_hWnd )
{
DestroyWindow();
}
//CDialog::OnClose();
}

2. PostNcDestroy()를 추가
void CTestDlg::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
CDialog::PostNcDestroy();
}
를 하면 됩니다.

2017년 2월 19일 일요일

Gidplus를 사용한 MFC 버튼 이미지( Select, Disable, Mousehover, MouseLeave)

Gdiplus를 사용해서 resource의 이미지를 가져와 버튼에 이미지를 올리는 클래스다.

GdiplusBitmapBtn.h/GdiplusBitmapBtn.cpp

Bitmap 변수가 NULL일때

  • 생성자에

GdiplusStartupInput gdiStartUp;
::GdiplusStartup( &m_gdiToken, &gdiStartUp,NULL);

  • 소멸자에

::GdiplusShutdown(m_gdiToken);

  • 해더에
ULONG_PTR m_gdiToken;


를 추가해 준다.

< 퍼갈땐 퍼간다고 남겨주세요. >

2017년 2월 8일 수요일

UpdateData(TRUE) / UpdateData(FALSE)

간혹 기억이 안나서 적어 둠
UpdateData(TRUE) : 컨트롤의 값을 변수로
UpdateData(FALSE) : 변수의 값을 컨트롤로
MSDN

MFC에서 Add variable로 컨트롤의 변수나 클래스를 추가할때 스크립트 오류 메세지 발생시

DDX_ 가 호출되기 전에 DDV_가 작성되어 있으면 발생한다. DDX_가 먼저 작성되고 DDV_가 장성되도록 하자
ex) 이런 순서가 되도록
DDX_Text(pDX, IDC_EDIT, m_nInt);
DDV_inMaxUInt(pDX, m_nInt, 0, 1000);

2017년 1월 11일 수요일

4GB 이상 파일 포인터 지정( SetFilePointerEx )

4GB 이상의 파일의 파일포인터를 지정할때는 SetFilePointerEx를씀

int64_t llFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod)
{
LARGE_INTEGER li;
li.QuadPart = distance;
SetFilePointerEx(hf, li, &li, MoveMethod);
if (GetLastError() != NO_ERROR)
{
  li.QuadPart = -1;
}
    return li.QuadPart;
}


SetFilePointer를 쓸대는 QuadPart를 음수로 변환해서
난 잘 안되던데 왜인지.... 댓글좀
int64_t llFileSeek (HANDLE hf, __int64 distance, DWORD MoveMethod)
{
LARGE_INTEGER li;
li.QuadPart = -distance;
SetFilePointerEx(hf, li, &li, MoveMethod);
if (GetLastError() != NO_ERROR)
{
   li.QuadPart = -1;
}
    return li.QuadPart;
}