본문 바로가기 메뉴 바로가기

JHB의 삽질 이야기

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

JHB의 삽질 이야기

검색하기 폼
  • 분류 전체보기 (373)
    • JHB (23)
      • IT 이야기 (4)
      • 잡다한 이야기 (19)
    • Cloud (44)
      • AWS (40)
    • Language (46)
      • C C++ (26)
      • C# (2)
      • Java (1)
      • Python (16)
    • Development (221)
      • Windows (62)
      • Mobile (72)
      • Linux (6)
      • Driver (12)
      • Firmware & HW (3)
      • Algorithm (14)
      • CM&CI&CD (14)
      • Web개발 (8)
      • Container (1)
      • Database (1)
      • Etc (26)
      • Tip (2)
    • MUSIC (17)
      • Listen (12)
      • Compose (5)
    • ETC (20)
      • Public (20)
    • TOOL/FRAMEWORK
      • MFC
      • WPF
      • GIT
    • LANGUAGE
      • C/C++
      • C#
      • Java
      • Python
  • 방명록

mfc (42)
이번 프로젝트 하면서 겪은 설계 실수 몇가지

작게 시작한 프로젝트 규모가 점점 커지면서 리팩토링을 하게 됐는데 크고 작은 실수가 몇개 있었다. 덕분에 엄청난 시행착오를 거쳐 오랜 시간걸렸다. 몇가지 실수를 적어 보겠다. 첫번째는 메세지 전달 부분에서의 의존성을 줄이지 못한 부분이다. 각 모듈을 DLL로 쪼개는 리팩토링을 감행 하였는데 여기서 각 DLL 간 의존성을 0으로 하고, 최대한 독립적으로 General 하게 코딩하려 했다. A DLL에서 B DLL로 메세지를 전달 하는 과정에서 상수값을 어쩔 수 없이 공유하게 됐는데, 차라리 A DLL에 SetListener 메소드를 구현하고, B DLL에서 해당 메소드를 콜해서 원하는 핸들러를 등록하게 했어야 했다. 두번째는, Data와 Controller를 완벽하게 분리 하지 못했다. 기본적으로 Data..

JHB/잡다한 이야기 2016. 3. 5. 17:02
[MFC] CRect의 IsRectNull()과 IsRectEmpty()

CRect의 생성자에 NULL을 넣어서 초기화 해주면 쓰레기 값이 들어간다. 예를 들어 CRect rt(NULL); 하면 rt에는 막 -2349823 이런 쓰레기 값이 들어간다 0으로 초기화 하는게 목적이라면 그냥 CRect rt 까지만 해주는게 제일 좋다. 이 차이가 어디서 발생하냐면 IsRectNull()과 IsRectEmpty() 의 성공 여부 때문이다. 나는 당연히 CRect rt(NULL) 한 다음에 rt.IsRectNull() 하면 TRUE가 리턴될 줄 알았다. 그런데 아니더라. IsRectNull()은 해당 CRect가 0으로 초기화 돼있는지를 검사하기 때문이다. 하지만 쓰레기 값이 들어있으니 rt(NULL)로 초기화 했다면 IsRectNull()로 FALSE가 나오는 것이다. 안전하게 rt..

Development/Windows 2016. 2. 16. 12:27
[MFC] DLL에서 STL (vector) Export 하기

MFC DLL에서 class에 vector를 담아서 Export 하려 시도 하였다. 처음에는 잘 되는 듯이 보였지만, class를 delete 하는 순간, 와장창 무너지기 시작했다. 계속해서 dbgheap.c의 _CrtIsValidHeapPointer(const void * pUserData) 안에 있는 HeapValidate( _crtheap, 0, pHdr(pUserData) ); 에서 FALSE을 리턴하여 ASSERT에 걸리게 되었다. 계속 디버깅을 해보니, vector의 소멸을 제대로 하지 못하고 있었다. vector의 소멸자를 따라가 보니 dbgheap.c의 _crtheap이 caller의 heap을 가리키고 있는 것이 보였다. 아니, 애당초 call stack의 소멸 지점이 callee 인 d..

Development/Windows 2016. 2. 1. 22:04
[MFC] ToolBar 항목 지우는 방법

위 사진은 컴파일해서 실행시켰을 때 모습이고 아래는 Resource View에서 봤을 때 모습이다.. Toolbar인데.. 잘못 생성을 해버리는 바람에 지우고 싶은데.. 도저히 지울 수가 없다. Delete키 누르면 그냥 그림이 쫙 지워지면서 위처럼 검정색 배경만 남는다. 어떻게 지우냐면.. 그냥 툴바 클릭 후 드래그 해서 화면 밖으로 빼버리면 빠진다.. 하아.. UX가 이렇다니..ㅠㅠ

Development/Windows 2012. 2. 26. 18:13
[TroubleShooting/MFC] Double Buffering을 구현하였는데도 깜빡이는 문제

몇일째 고민했던가... 더블 버퍼링으로 화면 출력을 시켰는데도 계속 깜빡이는 것이었다. 나는 이것의 문제를 내부에 사용한 MoveWindow나 BitBlt로 옮기는 대상과 타겟의 가로 영역 너비가 너무 길어서 라고 생각했다. 문제는 그것이 아니였다.. '음악 재생'시 사용하는 '바'가 움직일 때 화면을 계속 리프레쉬하면서 보여주기 위해 타이머를 사용하였는데, 이때 타이머에서 Invalidate(FALSE); 를 해주는 것이 문제였다. 어짜피 계속해서 Invalidate가 들어오고 있기 때문에 다른 곳에서는 이걸 해줄 필요가 없는데, 나는 MouseMove등에서도 계속해서 Invalidate를 호출해 주고 있었다. 그러니 마우스를 움직일때마다 엄청나게 호출되는 Invalidate덕분에 깜빡거렸던 것이다....

Development/Windows 2012. 2. 24. 05:07
[MFC] 다이얼로그 배경 투명하게 만들기

이 방법을 쓰면 child dialog도 투명하게 만들 수 있다. http://www.codeproject.com/Articles/9064/Yet-Another-Transparent-Static-Control

Development/Windows 2012. 2. 23. 01:14
[MFC] Double Buffering 더블 버퍼링 사용하기

MFC에서 더블버퍼링 사용하기. 이걸 왜 지금까지 안올려놨었지 -.-?;; 일단 제일 중요한건 헤더 파일에 CBitmap m_Bitmap; 를 선언 하는 것. 이 비트맵에 객체를 생성하고 이것저것 해줄 것임. 우선 아래와 같이 Bitmap에 그림을 그려줌. void CDlgXXX::MakeMemBitmap(void) { CClientDC dc(this); //실제 dc CBitmap* pOldBmp; //oldbmp CDC MemDC; //메모리DC m_Bitmap.DeleteObject(); //기존꺼 지워줌 m_Bitmap.CreateCompatibleBitmap(&dc, 500, 200); //새로 만들어줌 MemDC.CreateCompatibleDC(&dc); //memDC도 새로 만들어줌 pOl..

Development/Windows 2012. 2. 19. 21:24
MFC로 구현한 옵져버 패턴(옵저버 패턴)Observer 기본 뼈대

오오 멋지당

Development/Windows 2012. 2. 18. 20:57
이전 1 2 3 4 ··· 6 다음
이전 다음
공지사항
최근에 올라온 글
  • 캐논 G3900 프린터 잉크 안나올 때 석션하기
  • Serverless로 E-Commerce 만들기 ⋯
  • 갑자기 RDS CPU 점유율이 100%를 쳤다.
  • DDB Singletable 디자인
최근에 달린 댓글
  • 안녕하세요~ GridCtrl 을 사용중이시라면 Ctrl⋯
  • 혹시 스태틱으로 GridCtrl 사용해서 목록이있는 그⋯
  • 헉 안돼서 계속 윈도우로만 했는데 감사합니다 복받으세용
  • 글 잘 읽고 갑니다~
Total
862,898
Today
21
Yesterday
140
링크
  • Kaspyx - Hacking
  • JHB LinkedIn
  • Dive into Deep Learning
TAG
  • C
  • linux
  • jni강좌
  • Python
  • db
  • Cloud
  • C++
  • android
  • 리눅스
  • Visual C++
  • Troubleshooting
  • jni
  • MFC
  • source
  • java
  • driver
  • it
  • winapi
  • NDK
  • AWS
  • gcc
  • Quiz
  • 프로그래밍
  • 드라이버
  • kering
  • API
  • algorithm
  • database
  • 안드로이드
  • 음악
more
«   2023/06   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
글 보관함
  • 2023/05 (1)
  • 2022/03 (1)
  • 2021/11 (1)
  • 2021/10 (1)
  • 2021/09 (1)

Blog is powered by Tistory / Designed by Tistory

티스토리툴바