Skip to content
DarkKaiser의 블로그
DarkKaiser의 블로그
  • 개발 관련 자료(노션)
  • Raspberry Pi(노션)
  • WD My Cloud(노션)
  • GitHub
DarkKaiser의 블로그

[카테고리:] 프로그래밍 언어

Invalidate() VS UpdateWindow() 차이점

DarkKaiser, 2010년 5월 24일2023년 9월 4일

InvalidateRect()는 윈도우의 클라이언트 영역 중에서 일부분을 무효화 시키는 것입니다.
이때, 첫번째 인자는 어떤 윈도우인지를 가리키는 윈도우 핸들이고,
두번째 인자는 무효과시킬 사각 영역 좌표입니다. 이게 NULL이면 클라이언트 영역 전체라는 것이구요.
그리고 세번째 인자는 그 무효화 영역이 지워지고 다시 그려져야 하는지를 설정합니다. 만약 TRUE이면, 그 윈도우에게는 WM_ERASEBKGND 메시지가 한번 날려지고, WM_PAINT 메시지가

Continue Reading

분할 윈도우 사용방법

DarkKaiser, 2010년 5월 19일2023년 9월 5일

1. 동적 분할 윈도우

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- MainFrm.h
CSplitterWnd m_wndSplitterWnd;
- MainFrm.cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
return m_wndSplitterWnd.Create(this, 2, 2, CSize(1, 1), pContext);
// return CFrameWnd::OnCreateClient(lpcs, pContext);
}
- MainFrm.h CSplitterWnd m_wndSplitterWnd; - MainFrm.cpp BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { return m_wndSplitterWnd.Create(this, 2, 2, CSize(1, 1), pContext); // return CFrameWnd::OnCreateClient(lpcs, pContext); }
- MainFrm.h
CSplitterWnd m_wndSplitterWnd;

- MainFrm.cpp
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
  return m_wndSplitterWnd.Create(this, 2, 2, CSize(1, 1), pContext);
  // return CFrameWnd::OnCreateClient(lpcs, pContext);
}

위와 같이 하면 동적 분할 윈도우를 생성하여 사용할 수 있다.

2. 정적 분할 윈도우

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
- MainFrm.h
CSplitterWnd m_wndSplitHor; //수평 분항
CSplitterWnd m_wndSplitVer;
- MainFrm.h CSplitterWnd m_wndSplitHor; //수평 분항 CSplitterWnd m_wndSplitVer;
- MainFrm.h
CSplitterWnd m_wndSplitHor; //수평 분항
CSplitterWnd m_wndSplitVer; 
Continue Reading

IP 주소 컨트롤의 간단 사용법

DarkKaiser, 2010년 5월 18일2023년 9월 5일

IP 주소 컨트롤의 클래스 변수로 DWORD를 지정하여 아래와 같이 사용할 수 있다.

1. IP 문자열을 32비트로…

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 인자로 전달받은 문자열에 해당하는 IP 주소를 32비트로 변환
DWORD dwAddress = inet_addr("10.1.1.100");
// 인자로 전달받은 문자열에 해당하는 IP 주소를 32비트로 변환 DWORD dwAddress = inet_addr("10.1.1.100");
// 인자로 전달받은 문자열에 해당하는 IP 주소를 32비트로 변환
DWORD dwAddress = inet_addr("10.1.1.100");

2. 32비트를 IP 문자열로…

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// 네트워크 순서로 정렬된 값을 호스트 순서로 변환
DWORD dwAddress = ntohl(m_dwAddress);
// 입력받은 32비트 IP 주소를
// 네트워크 순서로 정렬된 값을 호스트 순서로 변환 DWORD dwAddress = ntohl(m_dwAddress); // 입력받은 32비트 IP 주소를
// 네트워크 순서로 정렬된 값을 호스트 순서로 변환
DWORD dwAddress = ntohl(m_dwAddress);
// 입력받은 32비트 IP 주소를 
Continue Reading

페이저 컨트롤

DarkKaiser, 2010년 5월 18일2023년 9월 5일

페이저 컨트롤은 도구 모음이나 버튼처럼 스크롤 기능이 없는 윈도우에 스크롤 기능을 제공하는 역활을 합니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
.h
CPagerCtrl m_wndPager;
CToolBar m_wndToolBar;
afx_msg void OnCalcSize(NMHDR * pNotifyStruct, LRESULT * result);
.cpp
ON_NOTIFY(PGN_CALCSIZE, 1234, &CPagerDemoView::OnCalcSize)
OnCreate()
{
...
m_wndPager.Create(WS_VISIBLE | WS_CHILD | PGS_HORZ, CRect(0, 0, 100, 32), this, 1234);
m_wndToolBar.CreateEx(&m_wndPager);
m_wndToolBar.LoadToolBar(IDR_MAINFRAME);
m_wndPager.SetChild(m_wndToolBar.m_hWnd);
m_wndPager.SetButtonSize(10);
m_wndPager.SetBorder(0);
.h CPagerCtrl m_wndPager; CToolBar m_wndToolBar; afx_msg void OnCalcSize(NMHDR * pNotifyStruct, LRESULT * result); .cpp ON_NOTIFY(PGN_CALCSIZE, 1234, &CPagerDemoView::OnCalcSize) OnCreate() { ... m_wndPager.Create(WS_VISIBLE | WS_CHILD | PGS_HORZ, CRect(0, 0, 100, 32), this, 1234); m_wndToolBar.CreateEx(&m_wndPager); m_wndToolBar.LoadToolBar(IDR_MAINFRAME); m_wndPager.SetChild(m_wndToolBar.m_hWnd); m_wndPager.SetButtonSize(10); m_wndPager.SetBorder(0);
.h
CPagerCtrl m_wndPager;
CToolBar m_wndToolBar;

afx_msg void OnCalcSize(NMHDR * pNotifyStruct, LRESULT * result);

.cpp
ON_NOTIFY(PGN_CALCSIZE, 1234, &CPagerDemoView::OnCalcSize)

OnCreate()
{
  ...
  m_wndPager.Create(WS_VISIBLE | WS_CHILD | PGS_HORZ, CRect(0, 0, 100, 32), this, 1234);

  m_wndToolBar.CreateEx(&m_wndPager);
  m_wndToolBar.LoadToolBar(IDR_MAINFRAME);

  m_wndPager.SetChild(m_wndToolBar.m_hWnd);
  m_wndPager.SetButtonSize(10);
  m_wndPager.SetBorder(0);
  
Continue Reading

CListCtrl에서 Drag & Drop 구현

DarkKaiser, 2010년 5월 18일2023년 9월 5일
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
.h
CImageList* m_pImgListDrag;
.cpp
void CDragDemoDlg::OnLvnBegindragListLeft(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
// ptDrag : 드래그하는 항목의 ListCtrl 기준 좌표
CPoint ptDrag, ptAction;
m_nIndexLeftSel = pNMLV-iItem;
m_pImgListDrag = m_List_Left.CreateDragImage(pNMLV-iItem, &ptDrag);
m_pImgListDrag-SetBkColor(RGB(0, 0, 0));
ptAction = pNMLV-ptAction;
SetCapture();
m_pImgListDrag-BeginDrag(0, ptAction - ptDrag);
m_List_Left.ClientToScreen(&ptAction);
m_pImgListDrag-
.h CImageList* m_pImgListDrag; .cpp void CDragDemoDlg::OnLvnBegindragListLeft(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); // ptDrag : 드래그하는 항목의 ListCtrl 기준 좌표 CPoint ptDrag, ptAction; m_nIndexLeftSel = pNMLV-iItem; m_pImgListDrag = m_List_Left.CreateDragImage(pNMLV-iItem, &ptDrag); m_pImgListDrag-SetBkColor(RGB(0, 0, 0)); ptAction = pNMLV-ptAction; SetCapture(); m_pImgListDrag-BeginDrag(0, ptAction - ptDrag); m_List_Left.ClientToScreen(&ptAction); m_pImgListDrag-
.h
CImageList* m_pImgListDrag;

.cpp
void CDragDemoDlg::OnLvnBegindragListLeft(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);

  // ptDrag : 드래그하는 항목의 ListCtrl 기준 좌표
  CPoint ptDrag, ptAction;
  m_nIndexLeftSel = pNMLV-iItem;
  m_pImgListDrag = m_List_Left.CreateDragImage(pNMLV-iItem, &ptDrag);
  m_pImgListDrag-SetBkColor(RGB(0, 0, 0));
  ptAction = pNMLV-ptAction;

  SetCapture();
  m_pImgListDrag-BeginDrag(0, ptAction - ptDrag);
  m_List_Left.ClientToScreen(&ptAction);
  m_pImgListDrag-
Continue Reading

CListCtrl의 헤더 컨트롤 드래그 & 드랍 및 정렬

DarkKaiser, 2010년 5월 18일2023년 9월 6일
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//헤더 컨트롤 드래그-앤-드롭 가능
DWORD dwExStyle = m_List.GetExtendedStyle();
m_List.SetExtendedStyle(dwExStyle | LVS_EX_HEADERDRAGDROP );
// 헤더 컨트롤을 통한 정렬을 가능하도록 한다.
m_bAscending = FALSE;
m_List.SortItems(&CHeadCtrlDemoDlg::CompareItem, (DWORD_PTR)this);
UpdateArrow();
// 헤더 컨트롤의 HDN_ITEMCLICK 메시지 핸들러
void CHeadCtrlDemoDlg::OnHdnItemclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMHEADER phdr = reinterpret_cast<LPNMHEADER(pNMHDR);
if(phdr-iItem == 0)
{
m_bAscending = !m_bAscending;
//헤더 컨트롤 드래그-앤-드롭 가능 DWORD dwExStyle = m_List.GetExtendedStyle(); m_List.SetExtendedStyle(dwExStyle | LVS_EX_HEADERDRAGDROP ); // 헤더 컨트롤을 통한 정렬을 가능하도록 한다. m_bAscending = FALSE; m_List.SortItems(&CHeadCtrlDemoDlg::CompareItem, (DWORD_PTR)this); UpdateArrow(); // 헤더 컨트롤의 HDN_ITEMCLICK 메시지 핸들러 void CHeadCtrlDemoDlg::OnHdnItemclickList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMHEADER phdr = reinterpret_cast<LPNMHEADER(pNMHDR); if(phdr-iItem == 0) { m_bAscending = !m_bAscending;
//헤더 컨트롤 드래그-앤-드롭 가능
DWORD dwExStyle = m_List.GetExtendedStyle();
m_List.SetExtendedStyle(dwExStyle | LVS_EX_HEADERDRAGDROP );

// 헤더 컨트롤을 통한 정렬을 가능하도록 한다.
m_bAscending = FALSE;
m_List.SortItems(&CHeadCtrlDemoDlg::CompareItem, (DWORD_PTR)this);
UpdateArrow();

// 헤더 컨트롤의 HDN_ITEMCLICK 메시지 핸들러
void CHeadCtrlDemoDlg::OnHdnItemclickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMHEADER phdr = reinterpret_cast<LPNMHEADER(pNMHDR);

  if(phdr-iItem == 0)
  {
    m_bAscending = !m_bAscending;
    
Continue Reading

CListCtrl의 그룹관리

DarkKaiser, 2010년 5월 18일2023년 9월 5일
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//1.그룹 생성 및 추가
LVGROUP group;
::ZeroMemory(&group, sizeof(group));
group.cbSize = sizeof(group);
group.mask = LVGF_HEADER | LVGF_GROUPID;
group.pszHeader = _T("First Group");
group.iGroupId = 10;
m_List.InsertGroup(-1, &group);
group.pszHeader = _T("Second Group");
group.iGroupId = 20;
m_List.InsertGroup(-1, &group);
//2.아이템 추가
LVITEM item;
::ZeroMemory(&item, sizeof(item));
item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_GROUPID;
CString strItem =
//1.그룹 생성 및 추가 LVGROUP group; ::ZeroMemory(&group, sizeof(group)); group.cbSize = sizeof(group); group.mask = LVGF_HEADER | LVGF_GROUPID; group.pszHeader = _T("First Group"); group.iGroupId = 10; m_List.InsertGroup(-1, &group); group.pszHeader = _T("Second Group"); group.iGroupId = 20; m_List.InsertGroup(-1, &group); //2.아이템 추가 LVITEM item; ::ZeroMemory(&item, sizeof(item)); item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_GROUPID; CString strItem =
//1.그룹 생성 및 추가
LVGROUP group;
::ZeroMemory(&group, sizeof(group));
group.cbSize = sizeof(group);
group.mask = LVGF_HEADER | LVGF_GROUPID;
group.pszHeader = _T("First Group");
group.iGroupId = 10;
m_List.InsertGroup(-1, &group);
group.pszHeader = _T("Second Group");
group.iGroupId = 20;
m_List.InsertGroup(-1, &group);

//2.아이템 추가
LVITEM item;
::ZeroMemory(&item, sizeof(item));
item.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_GROUPID;
CString strItem = 
Continue Reading

tinyxml 정리

DarkKaiser, 2010년 5월 13일2023년 9월 4일
http://lyb1495.tistory.com/entry/C-XML-Parser-TinyXml
Continue Reading

SAX를 이용한 Java XML 샘플 코드

DarkKaiser, 2010년 5월 12일2023년 9월 6일
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
public class SaxSample {
public static void main(String[] args) {
// SAX를 준비한다.
SAXParser saxParser = null;
try {
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
saxParser = saxFactory.newSAXParser();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
// 핸들러를 작성한다.
import java.io.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import javax.xml.parsers.*; public class SaxSample { public static void main(String[] args) { // SAX를 준비한다. SAXParser saxParser = null; try { SAXParserFactory saxFactory = SAXParserFactory.newInstance(); saxParser = saxFactory.newSAXParser(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } // 핸들러를 작성한다.
import java.io.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class SaxSample {
  public static void main(String[] args) {
    // SAX를 준비한다.
    SAXParser saxParser = null;
 
    try {
      SAXParserFactory saxFactory = SAXParserFactory.newInstance();
      saxParser = saxFactory.newSAXParser();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    }

    // 핸들러를 작성한다.
    
Continue Reading

for each

DarkKaiser, 2010년 5월 10일2023년 9월 6일

참고 : Vector Container Iterating 속도 비교(http://npteam.net/775)

VS2005부터는 for each, in 키워드를 지원한다.
for each 문은 C#이나 JAVA 5 버전부터 지원하는 키워드이나 VS2005부터 지원한다. C++ 표준은 아직 아니고 MS Specific 이다.
MS의 for each 문은 향상된 for 문으로 STL이나 CLR의 Collection을 지원한다. 하지만 안타깝게도 VS2005부터 사용되는 ATL Collection

Continue Reading
  • Previous
  • 1
  • …
  • 4
  • 5
  • 6
  • …
  • 19
  • Next

최신 글

  • AssertJ 소개testCompile ‘org.assertj:assertj-core:3.6.2’ 2017년 9월 14일
  • 자주 사용되는 Lombok 어노테이션 2017년 9월 14일
  • 유니코드 #3 2017년 9월 14일
  • 유니코드 #2 2017년 9월 14일
  • 유니코드 #1 2017년 9월 14일

최신 댓글

    카테고리

    • 개인 자료 (1)
      • 일기 (1)
    • 주절주절 (7)
    • 프로그래밍 갤러리 (16)
    • 프로그래밍 언어 (186)
      • Java (29)
      • C/C++/VC++ (114)
      • C# (11)
      • Visual Basic (6)
      • 안드로이드 (9)
      • Objective-C (5)
      • JavaScript (4)
      • JSP/Servlet (2)
      • Python (4)
      • 어셈블러 (1)
    • 개발++ (44)
      • Book (11)
        • Joel On Software (10)
      • 프로젝트 관리 (6)
      • Maven (1)
      • 디버깅 (1)
      • DirectX (1)
      • Silverlight (1)
      • RESTful (1)
      • Hacking (1)
      • WDM (4)
      • VoIP (5)
      • 기타 (1)
    • 개발 도구 (15)
      • eclipse (14)
      • Sublime Text (1)
    • 네트워크 (7)
    • 설치 및 배포 (7)
      • InstallShield (2)
      • NSIS (4)
    • 버전 관리 (9)
      • Git (2)
      • CVS (2)
      • Subversion (5)
    • 데이터베이스 (7)
      • Oracle (3)
      • Sybase (2)
      • MS-SQL (2)
    • 단위테스트 (3)
      • JUnit (1)
      • NUnit (2)
    • 버그추적시스템 (2)
      • mantis (2)
    • 운영체제 (7)
      • Windows (5)
      • 리눅스 (2)
    • WAS (3)
      • WebLogic (3)
    • 디자인패턴 (1)
    • 디지털 이미지 프로세싱 (16)

    태그

    AutoExp.dat CppUnit CreateFile CVS Detours Generic ignore파일 Installer Isolation level LogCat OSI OSI 7 layer PRODUCTION_MODE request RunInstaller Runnable SafeInt session setPoperty startWebLogic.cmd STL synchronized TAB time_t VC Vector VS2005 날짜 디버깅 리치에디트컨트롤 매핑모드 문서화 주석 변환 사설 IP 성능 주석 트랜젝션 트리 프로젝트관리 프로파일러 픽셀 형변환 형식 확장자 히스토그램

    메타

    • 로그인
    • 엔트리 피드
    • 댓글 피드
    • WordPress.org
    ©2025 DarkKaiser의 블로그 | WordPress Theme by SuperbThemes
    DarkKaiser의 블로그
    DarkKaiser의 블로그
    • 개발 관련 자료(노션)
    • Raspberry Pi(노션)
    • WD My Cloud(노션)
    • GitHub