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

[카테고리:] C/C++/VC++

윈도우 7 프로그래밍 – 2

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

1. 썸네일 툴바(Thumbnail Toolbar)

아래와 같은 썸네일 툴바를 추가해보자.

우선 프로그램 시작시에 OLE를 초기화하도록 한다. ::InitInstance() 에 넣으면 좋겠다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
CoInitialize(NULL);
CoInitialize(NULL);
CoInitialize(NULL);

이 후 전역변수를 선언하여 태스크바 버튼 생성 메시지를 등록한다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
static UINT s_uTBBC = ::RegisterWindowMessage(L"TaskbarButtonCreated");
static UINT s_uTBBC = ::RegisterWindowMessage(L"TaskbarButtonCreated");
static UINT s_uTBBC = ::RegisterWindowMessage(L"TaskbarButtonCreated");

등록한 이후에 이 메시지를 받기 위한 이벤트 핸들러를 선언한다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ON_REGISTERED_MESSAGE(s_uTBBC, OnTaskbarButtonCreated)
LRESULT CMyDlg::OnTaskbarButtonCreated(WPARAM, LPARAM)
{
ITaskbarList3
ON_REGISTERED_MESSAGE(s_uTBBC, OnTaskbarButtonCreated) LRESULT CMyDlg::OnTaskbarButtonCreated(WPARAM, LPARAM) { ITaskbarList3
ON_REGISTERED_MESSAGE(s_uTBBC, OnTaskbarButtonCreated)

LRESULT CMyDlg::OnTaskbarButtonCreated(WPARAM, LPARAM)
{
   ITaskbarList3 
Continue Reading

ON_REGISTERED_MESSAGE

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

다른 프로그램과 메세지를 주고 받는 방법중의 한 가지…

RegisterWindowMessage 함수를 사용하는 경우는 아래와 같이 메세지를 등록한다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
UINT nRegMsg = RegisterWindowMessage("My Message");
UINT nRegMsg = RegisterWindowMessage("My Message");
UINT nRegMsg = RegisterWindowMessage("My Message");

여기서 입력으로 들어가는 “My Message” 라는 문자열은 메세지를 서로 주고 받기로 한 프로그램간에 서로 약속한 문자열입니다. 이 함수는 메세지를 송신하는쪽이나, 메세지를 수신하는 쪽이나 모두 수행해야 합니다.

메세지가 등록되어 송수신

Continue Reading

VS2008, VS2010 지원 운영체제

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

VS2008에서 빌드된 실행 파일은 최소 윈2000 이상에서 실행되어져야 한다.

VS2010에서 빌드된 실행 파일은 최소 WinXP SP3 이상에서 실행되어져야 한다.
그 이하의 운영체제에서는 실행되어 질 수 없다.
VS2010에서는 멀티타겟팅 기능으로 2010 이하의 컴파일러로 빌드할 수 있는 기능을 제공해주긴 한다.
Continue Reading

Visual C++ 2010에서 라이브러리 배포 정책

DarkKaiser, 2010년 5월 25일2023년 9월 6일
Central Deployment(중앙배포)

Central deployment means that your Visual C++ DLLs are installed in the System32 directory. To centrally deploy your application, you can use one of the following:

•The VCRedist_architecture.exe command-line tool.

•Merge modules.

VCRedist_architecture.exe installs all libraries for the specific hardware platform. Merge modules, or

Continue Reading

SafeInt in Visual C++ 2010

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

참고 : http://www.nuonsoft.com/blog/2009/06/09/safeint-in-visual-c-2010/

VS2010에 추가된 라이브러리, 정수형 연산시에 오버플로우 확인이나 나눗셈시에 0으로 나누는 값 확인에 사용될 수 있다.

실제 아래 소스의 결과를 보면 연산 결과가 오버플로우시에는 결과값이 0으로 출력되며 이때 연산중에 SafeIntOnOverflow() 함수가 실행되는 것을 볼 수 있다.

또한 나눗셈 연산 시에도 나누는 값이 0이라면 연산시에 SafeIntOnDivZero() 함수가 호출되는 것을

Continue Reading

윈도우7 프로그래밍 – 1

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

1. 태스크바

CFrameWnd 클래스의 멤버 함수를 호출하여 태스크바에 추가 정보를 표시하는 오버레이 아이콘, 프로그레스바를 적용할 수 있다.

– 오버레이 아이콘 표시
SetTaskbarOverlayIcon(IDI_FILE_VIEW, L”Info”);// 오버레이 아이콘 표시
SetTaskbarOverlayIcon(nullptr, nullptr);// 오버레이 아이콘을 없앤다.

– 프로그레스바 표시
SetProgressBarRange(0, 50);// 프로그레스 바의 범위 설정
SetProgressBarPosition(50);// 프로그레스 바의 수치 설정
SetProgressBarState(TBPF_INDETERMINATE);// 프로그레스 바의 상태 변경

Continue Reading

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
  • Previous
  • 1
  • 2
  • 3
  • …
  • 12
  • 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)

    태그

    Assert() CImage CVS cvsnt DefaultTraceListener eclipse Generic Git MDI new OSI 7 layer pragma setPoperty snoopspy std::auto_ptr STL STLFit STLPort synchronized TCP/IP Thread UNICODE useBean volatile watch WinSXS XP테마 기하학 날짜 드라이브 디버깅 마스크 버그트래킹시스템 상수 설치프로젝트 스레드 시간 실용주의 자바빈즈 캡쳐 탭 트랜젝션 형변환 후킹 히스토그램

    메타

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