728x90
반응형

야곰야곰 337

[Win32] <xmllite.h> 사용 시 redefinition Error 발생 시

XML 파일을 읽어오는 프로그램을 작성하다가 이전 프로젝트에서는 문제가 없었는데, 새로 만들려고 하는 프로젝트에서 계속 redifintion 관련 에러가 마구 쏟아져서 열받고 있었는데.. 가 필요한 것을 알게 되었다. 이것은 CString을 사용하게 해주는 헤드 파일인데.. 가 CString을 사용하는 것 같다. 우선 클리어.

[MySQL] LIKE 구문

Query문의 WHERE을 사용하여 제약을 만들 때 부분적 일치를 확인하는 구문이다. -- A로 시작하는 이름을 가진 레코드 SELECT '컬럼명' FROM '테이블명' WHERE '컬럼명' LIKE 'A&' -- A로 끝나는 이름을 가진 레코드 SELECT '컬럼명' FROM '테이블명' WHERE '컬럼명' LIKE '&A' -- A를 포함하는이름을 가진 레코드 SELECT '컬럼명' FROM '테이블명' WHERE '컬럼명' LIKE '&A&' -- A로 시작하는 이름을 가진 두 글자 레코드 SELECT '컬럼명' FROM '테이블명' WHERE '컬럼명' LIKE 'A_' -- A로 시작하는 이름을 가진 세 글자 레코드 SELECT '컬럼명' FROM '테이블명' WHERE '컬럼명' LIKE '..

DB/MySQL 2021.06.04

[MFC] CTreeCtrl에서 Icon 삽입하기

CTreeCtrl에 Icon을 넣으면 시인성을 높일 수 있다. 그리고 Drag & Drop을 하려면 Icon이 필요하다. 아이콘을 만들려면 resource에 bmp 파일을 만들어 두어야 한다. 요렇게 만들자. 사용하려고 하는 동일 크기의 사이즈만큼 연속해서 붙이자. ID는 IDB_TREE_NODE라고 정했다. // 서브클래싱 상태로 코딩한다고 가정한다. // 컨트롤러를 선언해서 한다면 앞에 선언한 변수를 포함시키면 된다. CBitmap bmp; bmp.LoadBitmap(IDB_TOOLBAR_NODE); // BITMAP ID는 IDB_TOOLBAR_NODE라고 정했다. m_imageList.DeleteImageList // 멤버 변수로 CImageList를 m_imageList라고 선언해 두었다. //..

[MFC] 스크롤바 유무확인

UI에서 Autolayout을 구현하다 보면, 창의 크기에 따라서 스크롤바가 나타났다가 사라졌다가 한다. 스크롤바에 가려지는 콘텐츠가 없도록 하려면 스크롤바의 굵기만큼 조절해 줘야 한다. 처음에는 창의 크기와 콘텐츠들의 크기를 비교해가면서 Layout을 맞췄지만, 가로, 세로 스크롤바가 생성되는 부분에서 계산이 제대로 되지 않았다. 그래서 스크롤바 유무를 확인해서 방법을 알아보니 다음과 같이 하면 되었다. if (GetStyle() & WS_VSCROLL) { SCROLLINFO scrollInfo; GetScrollInfo(SB_VERT, &scrollInfo, SIF_ALL); widthColumn += scrollInfo.fMask; } 혹시 안되게 되면 스크롤바가 어느 UI에서 생기는 것인지도 알..

[MFC] MDI에서 자식창 크기 조절하기

MDI 프로그램을 하고 있는데, CChildFrame의 크기를 조절해야 해서 MoveWindow를 사용하려고 하니 Frame 좌측 상단 좌측을 정확하게 찾을 수가 없었다. 그래서 여러 가지 조합을 사용했는데 미세하게 오차가 나서 고민하는 차에 SetWindowPos를 하면 되나 싶어서 사용하니 쉽게 된다. SetWindowPos(NULL, 0, 0, frameRect.Width(), frameRect.Height(), SWP_NOMOVE); 몇 시간을 Layout 잡는데 허비했다. 주의할 점은 꼭 Frame을 핸들로 잡고해야 한다는 것이다.

[MySQL] SHOW TABLES 테이블 정보 확인

데이터베이스에 생성된 테이블 정보를 확인하는 명령은 'SHOW TABLES'가 있다. MariaDB [stsodb]> SHOW TABLES; +---------------------+ | Tables_in_stsodb | +---------------------+ | machcomptbl | | machsubcomptbl | | v_machcompDomain | | v_machsubcompDomain | | v_submachDomain | +---------------------+ 14 rows in set (0.000 sec) 다른 방법으로는 information_schema를 사용할 수 있는데 엄청난 정보들이 나와서 추천하지는 않는다. SELECT TABLE_NAME FROM information_s..

DB/MySQL 2021.05.25

[MFC] SendMessage로 문자 보내기

SendMessage의 WPARAM과 LPARAM에 정수형 데이터를 실어 나르기는 어렵지 않다. 그렇다면 String들은 어떻게 전달할 수 있을까? 포인트를 이용하면 쉽게 전달할 수 있다. // 보내는 쪽 CString cellText; cellText = GetItemText(m_nItem, m_nSubItem); GetParent()->SendMessage(WM_MX_EDITCHANGED, (WPARAM)&cellText, NULL); // (WPARAM)&cellText 참조자에 WPARAM을 캐스팅하여 전달한다. 받을 때에는 CString으로 캐스팅하면 된다. LRESULT CDBAppListView::OnEditChanged(WPARAM wParam, LPARAM lParam) { CString..

[MFC] MDI 자식창 모두 닫기

작업을 위해서 띄어 놓은 다수의 창을 한꺼번에 닫는 일은 종종 발생한다. 모든 창을 한꺼번에 닫는 것은 자식 창을 모두 검색해야 할 것 같지만 MFC는 해당 기능을 지원한다. App Class에는 CloseAllDocument()라는 함수가 있다. 간단한 호출로도 모든 자식 창을 닫을 수 있다. theApp.CloseAllDocument(); 다양한 형태의 Document를 사용하고 있다면, 분명 CDocTemplate를 종류 별로 멤버 변수로 등록하고 사용하고 있을 것이다. 그럴 경우에는 멤버 변수 별로 호출하면 각각의 자식 창을 모두 닫을 수 있다. CDocTemplate* pTemplateDoc = theApp.m_pDocTemplate; pTemplateDoc->CloseAllDocuments(F..

[MFC] MDI에서 자식 창을 맨 앞으로 가져오기

MDI에서 ChildFrame을 관리하는 것은 생각보다 번거로운 일이다. CMainFrame에서 CChildFrame을 찾고 해야 한다. MDI에서 새로운 창을 만들 때에 가끔 동일 창을 호출하는 경우가 있다. 그럴 경우에는 창을 새롭게 만들 것이 아니라 만들어진 창을 맨 앞으로 끄집어 와야 한다. 보통 CChildFrame을 컨트롤할 때는 아래와 같이 한다. // CMainFrame 에서 라면, CWnd* pWnd = FindWindow(NULL, /*ChildWnd Name*/); pWnd->BringWindowToTop(); // 해당 창을 맨 앞으로 가져온다. 하지만 Caption의 이름이 바뀔 수도 있고, 관리하기도 쉽지 않다. 그래서 CMainFrame에 CChildFrame을 관리할 수 있는..

[MFC] MDI에서 시작 시 새 창 방지 코드

MFC에서 MDI로 프로젝트를 만들면, 실행 후 항상 새 창 하나가 나타난다. 이것을 방지하기 위해서는 App 파일의 InitInstance() 함수에 아래와 같은 코드를 집어넣어주면 된다. // Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 새창 열기 금지 if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew) cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing; 함수가 끝나가기 직전에 위치하고 있다.

[MFC] MDI에서 새창 열기

CDocTemplate* pTemplateDoc = theApp.m_pDocTemplate; // App에서 멤버 포인터를 가져온다. pTemplateDoc->OpenDocumentFile(NULL); // 새창에 연다.​ m_pDocTemplate = new CMultiDocTemplate(IDR_DBAppTYPE, RUNTIME_CLASS(CDBAppDoc), RUNTIME_CLASS(CChildFrame), // custom MDI child frame RUNTIME_CLASS(CDBAppListView)); if (!m_pDocTemplate) return FALSE; AddDocTemplate(m_pDocTemplate); MDI에서 새창을 여는 것은 App에 선언된 메시지를 이용하는 방법이 가..

[MFC] 다이얼로그 캡션 변경

MFC에서 윈도우 창의 캡션을 변경하려면, 첫 번째로는 CMainFrame::PreCreateWindow에서 CREATESTRUCT를 변경하는 방법이 있다. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style &= ~(FWS_ADDTOTITLE); // 캡션이 파일 읽어오기 등으로 바뀌지 않도록 변경 cs.lpszName = _T("MY APPLICATION"); // 원하는 캡션 작성 return TRUE; } 두 번째는 그냥 CMainFrame에서 SetWindowText(캡션명)을 호출하면 된다. CMainFrame이 아니라 다른 곳에서 변경하고 싶..

[MFC] CEdit : 폰트와 텍스트 색깔 바꾸기 (예제)

CEdit는 기본적으로 부모의 폰트를 따라가게 된다. CEdit를 수정하는 것은 부모 창에서 조절하는 방법도 있지만 일괄로 나만의 스타일을 구축하기에는 번거롭다. 그래서 Subclassing하여 스타일을 만들어 놓으면 두고두고 쓸 수 있어 유용하다. CEdit를 Subclassing하는 CMxEdit를 만든다. 헤드 파일에 CFont 변수를 선언한 후, 생성자에 Font에 대한 데이터를 미리 넣어둔다. Set/Get 함수를 이용한 Font의 업데이트도 좋지만, 많이 사용하는 스타일로 미리 만들어 놓으면 사용 시 손이 덜가는 경우가 많다. 그리고 CEdit는 WM_CREATE 같은 이벤트가 발생하지 않기 때문에 초기화도 WM_PAINT나 WM_CTLCOLOR_REFLECT 같은 이벤트를 사용한다. Font..

코드/MFC 2021.05.19

[MFC] MFC 컨트롤 서브클래싱 하기

MFC에서 컨트롤을 커스터마이징 하려면 서브 클래싱을 기본적으로 사용할 수 있어야 한다. 앞으로 여러 컨트롤을 커스터마이징 하는 방법을 포스팅할 예정이기 때문에 우선 서브 클래싱 하여 클래스를 만드는 방법부터 알아보자. 사실 익숙해지면 그냥 코드 상에서 수정하는 편이 더 편하다. 1. 프로젝트 (우클릭) > 추가 (우클릭) > 클래스 를 누르면 아래와 같은 창이 뜬다. MFC 콘트롤을 서브 클래싱 할 예정이므로 MFC Class를 선택한다. 2. Class Name은 새롭게 만들 클래스 이름이며, Base Class는 서브 클래싱 할 클래스 이름이다. 3. 생성된 클래스는 Base class를 상속한 형태로 만들어진다. 예로 CEdit를 Base Class로 하는 CMxEdit를 만들어 보았다. // C..

[MFC] CDockingPane Class 사용하기

예전에 그냥 쓰던 DockingPane을 사용하려고 하니 계속 Error가 발생했다. 여기저기 찾아봐도 그냥 사용하는 법만 있고 어떻게 사용해야 되는지는 생략되어 있었다. ( 그만큼 기본적이라는 건가.. ) 그래서 MFC의 CDockingPane을 적용하는 법을 정리해 둔다. Window : 유리들이 창틀에 끼여 집합된 창 Pane : 그냥 유리 한 장 Floating Pane : 떠다니는 유리 한 장 ( 어느 Window에도 끼어넣을 수 있는.. ) CDockingPane class를 MainFrame에 사용하려면 기존의 상속된 CFrameWnd(혹은 CMDIFrameWnd)를 사용할 수 없다. 상속받는 class를 CFrameWndEx(혹은 CMDIFrameWndEx)로 변경해야 한다. class C..

[SQLite] VSCode에서 SQLite 사용하기

VSCode에서 SQLite를 사용하는 것이 가능하다. 우선 SQLite로 만들어진 *.db3 파일을 VSCode로 연결하면 확장팩에서 SQLite를 추천해준다. 그것이 아니라면 확장팩 검색을 하자. '설치'를 눌러주면 자동으로 설치해 준다. 설치가 끝나면 MySQL Workbench처럼 바로바로 사용할 수 있을 줄 알았는데 그것은 아닌 것 같았다. [SQLite] SQLite 설치 및 사용 준비 SQLite는 클라이언트 응용 프로그램에 임베디드 되어 동작하는 Open Source DBMS이다. SQLite는 '경량화' 되어 있는 DB이며 파일을 기반으로 하기 때문에 데이터베이스의 백업 역시 파일을 통째로 복사하 stormpy.tistory.com Database 파일 여는 방법 1. 명령 팔레트 명령을..

DB/SQLite 2021.05.14
728x90
반응형