320x100

[MFC] CComboBox : 내용길이에 따라 DropDown박스 사이즈 조정

Posted on 2009. 12. 29. 16:11
Filed Under Visual C++


// Message Map
ON_CBN_DROPDOWN(IDC_COMBO1, OnDropdownCombo1)

// 사용
void CTestDlg::OnDropdownCombo1()
{
        gfSetDroppedWidthCb(m_Combo, this);
}

// 자동 리사이즈 함수
inline void gfSetDroppedWidthCb(CComboBox& _cb, CWnd* _pwndParent)
{
    int nNumEntries = _cb.GetCount();
    int nWidth = 0;
    CString str;
 
    CClientDC dc(_pwndParent);
    int nSave = dc.SaveDC();
    dc.SelectObject(_pwndParent->GetFont());
 
    int nScrollWidth = ::GetSystemMetrics(SM_CXVSCROLL);
    for (int i = 0; i < nNumEntries; i++)
    {
        _cb.GetLBText(i, str);
        int nLength = dc.GetTextExtent(str).cx + nScrollWidth;
        nWidth = __max(nWidth, nLength);
    }   
    nWidth += dc.GetTextExtent(_T("0")).cx;
 
    dc.RestoreDC(nSave);
    _cb.SetDroppedWidth(nWidth);
}

천과장님~ 땡스얼랏! >_</

<적용전>
<적용 효과>
반응형

CWinThread 내에서 생성한 CWnd 자동으로 삭제되버리는 문제

Posted on 2009. 12. 15. 20:51
Filed Under Visual C++

1.요약

CWinThread로 UI Thread를 만드는 방법과 주의해야 할 점 수록!!


2.본문

CWinThread를 사용해서 스레드를 만드는 방법은 2가지가 있습니다.

 

(1) AfxBeginThread() - Worker Thread

 

(2) CWinThread::CreateThread() - UI Thread

우리가 취해야 할 방법은 2번입니다.

 

AfxBeginThread()를 사용하는 경우에는

API인 CreateThread나 CRT인 _beginthread()처럼

스레드 입구 함수(entry-point)를 지정할 수 있습니다.

그러면 새 스레드는 그 함수를 실행하면서 시작된다고 볼 수 있습니다.

 

2번 방법인 CWinThread::CreateThread() 를 사용하는 경우에는

스레드 입구 함수를 넘겨줄 수 있는 인자는 없습니다.

다음과 같은 방법으로 해야되겠죠.

 

(1) CWinThread를 상속받는 클래스를 만든다.
==> 예를 들어서 CUIThread 라고 합시다.

 

(2) CUIThread::InitInstance()를 스레드 입구 함수로 보고 그곳에 필요한 코드를 넣습니다.

 

아마도 메인 윈도우를 만들어서 저장시키는 등의

( 여러분이 줄곧 CWinApp-based 클래스의 InitInstance() 에서 했던 일들이겠죠)

끝입니다.

 

UI Thread이기 때문에 메인 윈도우가 죽으면서

PostQuitMessage() 를 해주면 스레드가 종료하겠죠.

 

스레드 종료시 CWinThread 객체는 디폴트로 자기자신의 메모리를 해제하도록 되어있습니다.

그러니까 만약에 CWinThread-based 클래스의 객체를

Heap( new나 malloc()으로 할당한경우)이 아닌 곳에 생성했다면 문제가 발생하겠죠.

 

이는 다음과 같은 간단한 조치로 막을 수 있습니다.

CWinThread-based 클래스의 생성자에서 가볍게 다음과 같이 해주면 됩니다.


m_bAutoDelete = FALSE;

 

4.참고

MSDN - CWinThread overview

출처: http://blog.naver.com/kelly85/110014329730

반응형

ocx 등록하기

Posted on 2009. 12. 14. 18:21

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 입력하세요.

Visual Studio 2010 Beta 다운받기

Posted on 2009. 11. 11. 15:13
Filed Under Visual C++

반응형

Visual C, C++ KB문서, 2005.05.23 [펌]

Posted on 2009. 10. 28. 13:46
Filed Under Visual C++

Visual C, C++ KB문서 C / C++

2005/05/23 12:14

http://blog.naver.com/kyehwan2/13150553

  

제 목

KB 번호

스크린세이버 타임아웃을 지정하고 현재 스크린세이버가 실행중인지를 알아보는 방법

KR601174

HowTo: MFC OCX 상태를 클라이언트에 저장하는

KR601350

HowTo: Auto Dial 기능을 프로그램에서 조정하는

KR601348

Visual C++, Visual Basic 코드를 동시에 디버깅하는

KR601346

CTreeCtrl 상태를 나타내는 이미지 표시 하기

KR601347

프로그램 설치시 사용중인 DLL 겹쳐 쓰는 방법

KR601166

MFC SDI 어플리케이션에서 두개의 프레임을 사용하는 방법

KR601165

HowTo: 다른 사용자로 로그인하여 Impersonate 하기

KR601345

HowTo: Windows NT를 Shut Down하는 프로그램 작성

KR601349

MAPI:탐색에서 Restrict() 혹은 FindRow() 무엇을 사용할 것인가?

KR601344

DPA Credential 없애는 방법

KR601184

MFC OCX/ATL Object 등록오류(0x0000001f)

KR601176

DPA 인증창의 비트맵을 바꾸는 방법

KR601168

Exchsdk.lib 의 mfc40.lib 의존성을 없애는 방법

KR601169

RADIUS SDK 포함된 IAS(인터넷 인증 서비스) dialin 샘플 빌드

KR601180

사이트 서버로 작성한 멤버십 데이터베이스를 일반 어플리케이션에서 사용방법

KR601164

DHTML Edit Control이나 RichEdit Control 내부적으로 Global IME 지원한다.

KR601181

임의의 Exchange 사용자에게 도착한 메시지 수를 읽는 방법

KR601182

Visual Studio 6.0 설치 시스템 부팅마다 전화접속 네트워킹이 시작된다.

KR601179

두개의 오브젝트가 공유하는 IDL 있을때 Client에서 타입라이브러리 사용시 Redefinition Err처리방법

KR601178

msado20.tlb 을 import 할때 컴파일 오류를 처리하는 방법

KR601177

뷰로서 웹브라우저 컨트롤을 사용하는 MFC MDI 어플리케이션에서 클릭된 뷰를 활성화 하는 문제

KR601171

ATL 에서 ADO 오브젝트를 직접 리턴하는 방법

KR601175

CwebBrowser2 기본 윈도우 프로시저 바꾸는 방법

KR601170

ASP 의 BinaryRead() 혹은 ISAPI ReadClient() 때때로 블록된다

KR601183

ADO Recordset 을 Database 없이 생성하는 방법

KR601173

파일 extension 없는 오피스 파일로부터 파일의 종류를 알아내는 문제

KR601172

웹브라우저 컨트롤의 폰트 크기를 설정하는 방법

KR601167

Exchange 2000 저장된 Item 스트림 출력하기

KR601375

Exchange 2000 폴더 만들기

KR601376

Exchange 2000 에서 VC++ 과 CDO 이용해서 메일보내기

KR601377

ATL EXE COM 서버를 클라이언트 요청당 하나씩 실행하는 방법

KR601438

STA/MTA COM 서버가 클라이언트에 서비스하는 방법

KR601437

ATL exe com 서버로의 클라이언트 요청을 병렬처리하는 방법

KR601436

HOWTO: MFC 어플리케이션에서 메모리 누수 추적하는 방법

KR601929

HOWTO: TTS_BALLOON type 이용한 풍선도움말 만들기

KR601475

HowTo: Visual C++ 성능 문제 해결 방법

KR236399

HOWTO: 릴리즈 모드로 빌드된 프로그램의 디버깅

KR601474

HOWTO: ISAPI Filter에서 리모트 공유 디렉터리를 접근하는 방법

KR601473

Windbg에서 소스 파일상에서 디버깅하기 위한 ActiveX 컴포넌트 프로젝트 셋팅 방법

KR601906

프로그램에서 서비스 삭제하는 방법

KR601930

HOWTO: Visual C++ WebBrowser 응용 프로그램에서 스크립트 함수를 호출하는 방법

KR185127

IE 에서 DHTML Editing 컨트롤을 이용한 MFC OCX 처리 문제

KR601529

IXMLHttpRequest 이용하여 ASP에 POST Request 보내는 방법

KR601530

ADSI 이용한 NT 사용자(한글 이름 한글 설명) 만들기

KR601932

CComBSTR 클래스에서 BSTR Casting 하면 Heap 손상

KR601931

HOWTO: WebBrowser 컨트롤을 위해 앞으로 단추와 뒤로 단추 사용

KR163282

HowTo: Visual Basic에서 작성한 ActiveX DLL을 Visual C++에서 호출하는 방법

KR601936

HOWTO: ADO/RDS 서버에서 레코드 집합 배열 반환

KR254021

HOWTO: ATL 개체 마법사에서 FTP 옵션 선택과 연결된 코드 제거

KR257467

MFC Dialog상의 WebBrowser 컨트롤에서 입력 처리하는 방법

KR601935

HOWTO: MSDN Library와 Visual Studio 수동으로 제거

KR248697

VB 6에서 작성한 VBD 파일을 VC++ 6 작성한 Container에서 Load하는 방법

KR601933

HOWTO: ATL에서 스레드 풀(Thread-Pooled), 분산 모델 COM 서버 구현

KR244495

HOWTO: MFC 컨트롤을 스크립트 사용에 안전(Safe for Scripting)/초기화에 안전(Safe for Initialization)으로 표시

KR161873

HOWTO: WebBrowser 컨트롤의 상황에 맞는 표준 메뉴에 항목 추가

KR177241

HOWTO: ActiveX 컨트롤에서 페이지의 URL 검색

KR181678

Animated GIF를 DOM 이용하여 추가 시 Animate되지 않는 문제

KR601934

BUG: MFC ODBC를 SQL Server ODBC 드라이버와 함께 사용할 때의 UNICODE 문제

KR249803

PRB: 재배포 가능한 컨트롤을 동적으로 만들 없다

KR151804

HOWTO: ActiveX 컨트롤의 실제 부모 창을 검색하는 방법

KR150204

HOWTO: MFC 포함된 기본 컨트롤을 재정의(Override)하는 방법

KR96835

PRB: ATL의 IOleInPlaceSite::OnPosRectChange 컨트롤 크기를 조절하지 않는다.

KR242994

원격 NT 서버의 Event Log 정보를 읽는

KR601750

HOWTO: Visual C++ WebBrowser 응용 프로그램에서 스크립트 함수를 호출하는 방법

KR185127

HOWTO: 인터넷에서 사용하기 위해 MFC 컨트롤을 패키지로 만드는 방법

KR167158

HOWTO: CHtmlView 기본 팝업 메뉴를 나타나지 않게 하는 방법

KR236312

HOWTO:Word 사용자정의 CommandButton 추가하고 버튼의 Click 이벤트를 처리하는 방법

KR601752

ATL 프로젝트 디버깅

KR601763

Global Interface Table 이용하는 방법

KR601770

INFO: ATL(Active Template Library) FAQ

KR166480

INFO: 스레드 로컬 저장소 개요

KR94804

PRB: Win32 SHE API 호출 시의 예외 코드 0xE06D7363

KR185294

HOWTO: Visual C++로 Visual Basic ActiveX DLL 액세스하는 방법

KR194873

PRB: DHTML 에디터 컴포넌트를 이용하여 개발된 ActiveX 컴포넌트를 포함한 페이지를 접근할 오피스 설치 대화 상자가 나타나는 문제

KR601968

INFO: 동적으로 MFC Extension DLL에서 정의한 클래스의 멤버 함수 사용방법

KR601969

Visual C++ 프로그램에서 COM ActiveX DLL 호출하는 여러 가지 방법

KR602002

How to use one activex control in another activex control

KR602043

HOWTO: Convert ATL Exe into ATL Dll

KR602042

HOWTO: MFC DAO로 Access 2000 데이터베이스를 만드는 방법

KR230485

PRB: Access 2000 데이터베이스에 인식할 없는 데이터베이스 형식 오류

KR236991

MFC COM 클라이언트 애플리케이션에서 "서버 작업 중" 대화상자가 나타난다

KR602164

INFO: 유동 소수점 숫자에서 정밀도가 손실될 있는 이유

KR145889

INFO: 부동 소수점 연산의 정밀도와 정확도

KR125056


반응형

VC++ 버전별 배포방법과 재배포패키지(Redistributable Package)

Posted on 2009. 10. 13. 16:30
Filed Under Visual C++

반응형

Visual Studio .NET 확장자별 용도

Posted on 2009. 10. 1. 10:20
Filed Under Visual C++

확장자명

이름

설명

 

.sln

VS

솔루션

디스크상의 프로젝트, 프로젝트 항목 및 솔루션 항목 위치에 대한 참조를 개발 환경에 제공하여 이러한 각 항목을 솔루션으로 구성합니다.

 

.suo

솔루션 지정 옵션

솔루션을 열 때마다 사용자가 설정한 사용자 지정 내용이 포함되도록 솔루션과 연결할 수 있는 모든 옵션을 기록합니다.

 

확장자명

이름

설명

.asmx

소스

배포 파일

.atp

프로젝트

응용 프로그램 템플릿 프로젝트 파일

.bsc

프로젝트

브라우저 코드 파일

.dbp

프로젝트

데이터베이스 프로젝트 파일

.disco

소스

동적 검색 문서 파일. XML Web services 검색을 처리합니다.

.html, .html, .xsp, .asp, .htc, .hta, .xml

리소스

일반 웹 파일

.HxC

프로젝트

도움말 프로젝트 파일

.idb

컴파일

클래스 정의와 소스 파일 간의 종속성 정보가 들어 있는 상태 파일. 최소 다시 빌드 및 증분 컴파일을 하는 동안 컴파일러에서 사용할 수 있습니다. /Fd 컴파일러 옵션을 사용하여 파일 이름을 지정합니다. 자세한 내용은 /Gm(최소 다시 빌드 사용)을 참조하십시오.

.idl

컴파일

인터페이스 정의 언어 파일. 자세한 내용은 Windows SDK Interface Definition (IDL) File을 참조하십시오

.ilk

링크

증분 링크 파일. 자세한 내용은 /INCREMENTAL을 참조하십시오.

.map

링크

링커 정보를 포함하는 텍스트 파일. /Fm 컴파일러 옵션을 사용하여 맵 파일 이름을 지정합니다. 자세한 내용은 /MAP를 참조하십시오.

.obj, .o

 

컴파일되었지만 링크되지 않은 개체 파일

.ncb

해결책

컴파일하지 않는 브라우저 파일.

.pch

디버그

미리 컴파일된 헤더 파일

.pdb

디버그

프로그램 디버그 데이터베이스 파일. 자세한 내용은 PDB 파일을 참조하십시오

.rc, .rc2

리소스

리소스를 생성하는 리소스 스크립트 파일

.sbr

컴파일

소스 브라우저 중간 파일. BSCMAKE를 위한 입력 파일

.txt

리소스

텍스트 파일. 보통 "추가 정보" 파일

.vap

프로젝트

Visual Studio Analyzer 프로젝트 파일

.vbg

해결책

호환 가능한 프로젝트 그룹 파일

.vbp, .vip, .vbproj

프로젝트

Visual Basic 프로젝트 파일

.vcproj

프로젝트

Visual C++ 프로젝트 파일. 자세한 내용은 프로젝트 파일 및 메이크파일을 참조하십시오.

.vdproj

프로젝트

Visual Studio deployment 프로젝트 파일

.vmx

프로젝트

매크로 프로젝트 파일

.vup

프로젝트

유틸리티 프로젝트 파일


반응형

C Runtime 환경의 메모리 릭 잡기 [링크]

Posted on 2009. 9. 22. 16:40
Filed Under Visual C++

반응형

[펌]문자열 출력 함수 (TextOut, DrawText)

Posted on 2009. 9. 22. 13:16
Filed Under Visual C++

[펌]문자열 출력 함수
2007/01/10 15:33

복사 http://blog.naver.com/iperfume/100032988161

문자열 출력 함수.

BOOL TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR lpString, int cbString);

 

▶hdc:DC핸들

▶nXStart:문자열을 출력할 X좌표

▶nYStart:문자열을 출력할 Y좌표

▶lpString:출력할 문자열

▶cbString:문자열의 길이. 널 종료 문자열을 인식하지 않으므로 반드시 길이를 밝혀 주어야 한다.

 

 

 

문자열의 정렬 방법을 변경하는 함수

UINT SetTextAlign(HDC hdc, UINT fMode);

▶fMode:정렬 방식과 CP사용 여부 등의 플래그를 지정한다. 정렬 방식은 수평, 수직에 대해 각각 한 종류만 선택할 수 있다.

플래그 설명
TA_BLASELINE 텍스트의 기준선에 정렬
TA_BOTTOM 수직 하단 정렬
TA_TOP 수직 상단 정렬
TA_CENTER 수평 중앙 정렬
TA_LEFT 수평 왼쪽 정렬
TA_RIGHT 수평 오른쪽 정렬
TA_NOUPATECP 문자열이 출력된 후 CP는 변경되지 않는다.
TA_RTLREADING 문자열을 오른쪽에서 왼쪽으로 출력한다. 한글 윈도우즈에서는 의미가 없다.
TA_UPDATECP 문자열 출력 좌표 CP를 사용하며 문자열 출력 후 CP를 갱신한다.

 

 

 

 

사각영역을 정의하여 영역 안에 문자열을 출력할수 있다.

int DrawText(HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);

 

 

▶hDC:DC핸들

▶lpString:출력할 문자열. nCount가 -1이면 널 종료 문자열이어야 한다.

▶nCount:문자열을 길이. -1일 경우 널 종료 문자까지를 문자열 길이로 계산한다.

▶lpRect:문자열을 출력할 시각영역

▶uFormat:출력 옵션.

플레그 설명
DT_BOTTOM 텍스트를 사각 영역의 바닥에 출력한다. DT_SINGLELINE 플레그가 설정되어 있을 때만 사용할 수 있다.
DT_CALCRECT 문자열을 출력할 수 있는 사각 영역을 계산한다. 문자열이 여러줄로 되어 있으면 사각 영역의 바닥(bottom)을 확장하여 모든 문자열이 다 포함되도록 하며 문자열이 한줄로 되어 있으면 사각 영역의 오른쪽(right)을 확장한다. 이 플레그가 주어지면 실제 문자열은 출력되지 않고 계산만 해 준다.
DT_CENTER 수평 중앙 정렬
DT_EDITCONTROL 멀티 라인 에디트 컨트롤과 같은 방식으로 문자열을 출력한다. 문자의 수평폭을 계산하는 방법이 에디트 컨트롤과 동일하며 마지막 줄의 일부가 보이지 않을 경우 출력하지 않는다.
DT_END_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열은 자르고 생략 기호(...)을 대신 보여준다. 단어가 잘릴 경우는 생략 기호를 붙이지 않는다.
DT_EXPANDTABS 탭 문자를 확장하여 8문자 너비로 만든다.
DT_EXTERNALLEADING 일반적으로 폰트 높이에 External Leading은 제외되는데 이 플레그가 주어지면 폰트 높이에 External Leading을 포함시킨다.
DT_HIDEPREFIX 2000이상:&문자를 무시하며 &다음 문자에 밑줄이 그어지지 않는다.
DT_INTERNAL 시스템 폰트를 사용하여 텍스트 메트릭을 계산한다.
DT_LEFT 수평 왼쪽 정렬
DT_MODIFYSTRING 문자열을 출력된 모양대로 변경한다. DT_END_ELLIPSIS, DT_PATH_ELLIPSIS 플레그와 함꼐 사용되며 그 외의 경우는 아무런 효과가 없다.
DT_NOCLIP 클리핑없이 문자열을 출력한다. 그래서 문자열이 사각형 밖으로 벗어나도 자르지 않고 그냥 출력된다.
DT_NOFULLWIDTHCHARBREAK DBCS환경에서 자동 개행 방법을 SBCS와 동일하게 설정한다.
DT_NOPREFIX &문자를 그대로 출력한다.
DT_PATH_ELLIPSIS 문자열 끝이 사각 영역을 넘을 경우 문자열의 중간을 생략 기호로 바꾸어 사각 영역에 맞게 조정한다. 문자열 내부에 \문자가 있을 경우 마지막 \이후의 문자를 최대한 보존해 준다.
DT_PREFIXONLY 2000이상:&문자가 있는 위치에 밑줄만 출력한다. 텍스트는 출력되지 않는다.
DT_RIGHT 수평 오른쪽 정렬
DT_RTLREADING hdc에 선택된 폰트가 Hebrew 또는 Arabic 폰트인 경우 오른쪽에서 왼쪽으로 문자열을 출력한다.
DT_SINGLELINE 문자열을 무조건 한줄로만 출력한다. CR, LF코드가 있어도 개행되지 않는다.
DT_TABSTOP 탭 정지점을 설정한다. uFormat인수의 8~15비트(하위 워드의 상위 바이트)가 탭 정지점 설정에 사용되며 디폴트를 8문자이다.
DT_TOP 텍스트를 사각 영역의 윗쪽에 출력한다.
DT_VCENTER 수직 중앙 정렬한다.
DT_WORDBREAK 단어가 사각형의 오른쪽 변에 닿았을 경우 자동 개행한다. CR/LF 조합은 강제로 개행시킨다.
DT_WORD_ELLIPSIS 사각 영역을 넘을 경우 단어를 자르고 생략 기호를 붙인다.

 

 

 

 

 

그래픽 출력

COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);

BOOL MoveToEx(HDC hdc, int X, int Y, LPPOINT lpPoint);

BOOL LineTo(HDC hdc, int nXEnd, int nYEnd);

BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

BOOL Ellipse(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);

 

 

LineTo함수는 CP(현재 좌표)에서부터 지정한 좌표까지 선을 그으며 CP를 끝점으로 이동시켜 준다.

MoveToEx는 CP를 지정한 좌표(x,y)로 이동시켜준다.  이동전의 CP좌표를 lpPoint에 대입해주는데 이전 CP값이 필요치 않는 경우 lpPoint에 NULL을 넘겨주면 된다.

 

(a,b) ~ (c,d) 까지 선을 긋고 싶다면

MoveToEx(hdc, a, b, NULL);

LineTo(hdc,c,d);

 

 

 

case WM_PAINT:
 hdc=BeginPaint(hWnd,&ps);
 MoveToEx(hdc,150,150,NULL);
 LineTo(hdc,180,200);
 Rectangle(hdc,200,100,250,180);
 Ellipse(hdc,200,200,250,280);
 EndPaint(hWnd,&ps);
 return 0;

 

메시지 박스는 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달해 주거나 질문을 하는 장치.

 

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType);

 

▶hWnd : 부모 윈도우의 핸들. 메시지 박스의 이 윈도우의 모달 대화상자로 열린다. 부모 윈도우가 없을 경우 NULL로 지정할 수 있다.

▶lpText : 메시지 내용을 나타내는 널 종료 문자열. 이 문자열은 ANSI 문자열일 수도 있고 유니코드 문자열일 수도 있는데 어떤 포맷이라도 메시지 출력이 가능하다.

▶lpCaption : 메시지 박스의 타이틀 바에 나타날 문자열. NULL일 경우 디폴트로 Error(한글 윈도우즈에서는 오류)가 표시된다.

▶uType : 메시지 박스에 나타날 버튼의 종류와 아이콘 모양, 동작 방식을 지정한다. 다음 여러 그룹의 플래그 조합을 지정할 수 있다.

 

 

 


반응형

VC6 -> VS .NET 2008 로 컨버젼중~

Posted on 2009. 8. 20. 14:21
Filed Under Visual C++

[1] WINVER이 설정 안되어서 Vista 기반 컴파일!?
Command line warning D9035 :
    option 'Wp64' has been deprecated and will be removed in a future release
<http://kaistizen.net/EE/index.php/weblog/comments/vs2005_to_vs2008/>


<출처: http://blog.naver.com/leolo/70044309207>

Visual C++ 6.0 으로 진행되던 프로젝트를 Visual C++ 2005로 포팅하게 되면(Visual C++ 2005 툴을 이용한 Project 변환 이용) WINVER 가 정의 되지 않아 Default 값인 Windows Server 2003으로 설정된다는 메세지를 보게 된다.

WINVER not defined. Deafaulting to 0x0502 (Windows Server 2003)

만들고 있는 프로젝트가 지원해야 할 최소 OS 를 설정하기 위해서는 WINVER를 설정해야 한다.

설정값은 다음과 같다.

Minimum system required Macros to define
Windows Vista _WIN32_WINNT>=0x0600

WINVER>=0x0600

Windows Server 2003 _WIN32_WINNT>=0x0502

WINVER>=0x0502

Windows XP _WIN32_WINNT>=0x0501

WINVER>=0x0501

Windows 2000 _WIN32_WINNT>=0x0500

WINVER>=0x0500

Windows NT 4.0 _WIN32_WINNT>=0x0400

WINVER>=0x0400

Windows Me _WIN32_WINDOWS=0x0500

WINVER>=0x0500

Windows 98 _WIN32_WINDOWS>=0x0410

WINVER>=0x0410

Windows 95 _WIN32_WINDOWS>=0x0400

WINVER>=0x0400

반응형

디버깅 테크닉! 콘솔띄워서 바로 로그를 확인하자!

Posted on 2009. 8. 19. 10:06
Filed Under Visual C++

MFC 프로젝트하면서 콘솔창을 따로 띄워
printf로 로그를 뿌리고 바로바로 콘솔창으로 확인할 수 있답니다~

1) SYBSYSTEM을 Console로 변경
프로젝트 속성 > 링커 > 시스템 > 하위 시스템 = 콘솔(/SUBSYSTEM:CONSOLE)
(또는 #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") 사용)


2) main() 정의

void main()
{
    _tWinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW);        
}


main()정의는 Projecp.cpp에 하셔두 되구 stdafx.h에 해두 되더군요.
맘에 드는 곳에~

=========================================================

아니면 파일을 하나 만들어서
#ifdef _CONSOLE_DEBUG_MODE
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
void main()
{
    _tWinMain(GetModuleHandle(NULL), NULL, NULL, SW_SHOW);        
}
#endif


해놓고 #define _CONSOLE_DEBUG_MODE 선언하셔서 쓰셔두 될듯~

끝!

<정보출처: http://blog.naver.com/mysticodoi/140033357279>
반응형

Visual Studio .NET 확장자별 용도

Posted on 2009. 7. 29. 15:44
Filed Under Visual C++

 

확장자명

이름

설명

 

.sln

VS

솔루션

디스크상의 프로젝트, 프로젝트 항목 및 솔루션 항목 위치에 대한 참조를 개발 환경에 제공하여 이러한 각 항목을 솔루션으로 구성합니다.

 

.suo

솔루션 지정 옵션

솔루션을 열 때마다 사용자가 설정한 사용자 지정 내용이 포함되도록 솔루션과 연결할 수 있는 모든 옵션을 기록합니다.

 

확장자명

이름

설명

.asmx

소스

배포 파일

.atp

프로젝트

응용 프로그램 템플릿 프로젝트 파일

.bsc

프로젝트

브라우저 코드 파일

.dbp

프로젝트

데이터베이스 프로젝트 파일

.disco

소스

동적 검색 문서 파일. XML Web services 검색을 처리합니다.

.html, .html, .xsp, .asp, .htc, .hta, .xml

리소스

일반 웹 파일

.HxC

프로젝트

도움말 프로젝트 파일

.idb

컴파일

클래스 정의와 소스 파일 간의 종속성 정보가 들어 있는 상태 파일. 최소 다시 빌드 및 증분 컴파일을 하는 동안 컴파일러에서 사용할 수 있습니다. /Fd 컴파일러 옵션을 사용하여 파일 이름을 지정합니다. 자세한 내용은 /Gm(최소 다시 빌드 사용)을 참조하십시오.

.idl

컴파일

인터페이스 정의 언어 파일. 자세한 내용은 Windows SDK Interface Definition (IDL) File을 참조하십시오

.ilk

링크

증분 링크 파일. 자세한 내용은 /INCREMENTAL을 참조하십시오.

.map

링크

링커 정보를 포함하는 텍스트 파일. /Fm 컴파일러 옵션을 사용하여 맵 파일 이름을 지정합니다. 자세한 내용은 /MAP를 참조하십시오.

.obj, .o

 

컴파일되었지만 링크되지 않은 개체 파일

.ncb

해결책

컴파일하지 않는 브라우저 파일.

.pch

디버그

미리 컴파일된 헤더 파일

.pdb

디버그

프로그램 디버그 데이터베이스 파일. 자세한 내용은 PDB 파일을 참조하십시오

.rc, .rc2

리소스

리소스를 생성하는 리소스 스크립트 파일

.sbr

컴파일

소스 브라우저 중간 파일. BSCMAKE를 위한 입력 파일

.txt

리소스

텍스트 파일. 보통 "추가 정보" 파일

.vap

프로젝트

Visual Studio Analyzer 프로젝트 파일

.vbg

해결책

호환 가능한 프로젝트 그룹 파일

.vbp, .vip, .vbproj

프로젝트

Visual Basic 프로젝트 파일

.vcproj

프로젝트

Visual C++ 프로젝트 파일. 자세한 내용은 프로젝트 파일 및 메이크파일을 참조하십시오.

.vdproj

프로젝트

Visual Studio deployment 프로젝트 파일

.vmx

프로젝트

매크로 프로젝트 파일

.vup

프로젝트

유틸리티 프로젝트 파일

 

 

반응형

서브클래싱 관련 링크

Posted on 2009. 7. 8. 11:11
Filed Under Visual C++

반응형

_countof 매크로

Posted on 2009. 7. 8. 11:08
Filed Under Visual C++

#include <afxisapi.h>

// determine number of elements in an array (not bytes)
#define _countof(array) (sizeof(array)/sizeof(array[0]))
배열 사이즈를 알아내는 요런 매크로가 있다.


void Test2(TCHAR* szQry)    OR
void Test2(TCHAR szQry[])
{
    int size = _countof(szQry);  //<! size = 4 ☞ 두 경우다 배열사이즈를 모른다.
}

void OnTest()
{
    TCHAR szQry[1024];
    ZeroMemory(szQry, sizeof(szQry));

    int size = _countof(szQry);       //<!   1024 : 제대로 나온다.

    TCHAR* szQry = new TCHAR[10];
    int size = _countof(szQry2);       //<!   4  : 포인터형은 포인터 사이즈가 출력

    Test2(szQry);
}



반응형

MFC/CWnd 멤버 함수 [펌]

Posted on 2009. 7. 7. 14:17
Filed Under Visual C++

CWnd Class
 
- CWnd 클래스는 MFC의 모든 윈도우 클래스들에 대해서 기본적인 기능을 제공 하는 클래스이다.

데이터 멤버
m_hWnd : CWnd와 관련된 HWND를 가리킨다.


생성/소멸 관련 함수
CWnd : CWnd객체를 생성한다.
DestroyWindow : 윈도우를 소멸한다. 그렇지만 객체를 소멸시키는 것은 아니다.


초기화 관련 함수
Create : CWnd 객체와 관련된 자식 윈도우를 만들고 초기화한다.
PreCreateWindow : CWnd 객체와 관련된 실제 윈도우를 만들기 전에 호출된다.
CaleWindowRect : 클라이언트 사각형 영역에서 윈도우를 만들기 전에 호출된다.
GetStyle : 현재 윈도우의 스타일을 반환한다.
GetExStyle : 확장된 윈도우의 스타일을 반환한다.
Attach : CWnd 객체에 윈도우 핸들을 추가한다.
Detach : CWnd 객체에서 윈도우 핸들을 분리하고 핸들을 반환한다.
PreSubclassWindow : SubclassWindow가 호출되기 전에 필요한 다른 서브클래싱이 일어나 는 것을 허용한다.
SubclassWindow : CWnd 객체에 윈도우를 추가하고 CWnd의 메시지맵을 통해서 루트 메시 지로 만든다.
UnSubclassWindow : CWnd 객체에서 윈도우를 분리한다.
FromHandle : 윈도우에 핸들이 주어질 때 CWnd 객체에 대한 포인터를 반환한다. CWnd 객체가 핸들을 가지지 않는다면, 임시적인 CWnd 객체기 생성되고 추가된다.
FromHandlePermanent : 윈도우에 핸들이 주어질 때 CWnd 객체에 대한 포인터를 반환한다.
CWnd 객체가 핸들을 가지지 않는다면, NULL이 반환된다.
DeleteTempMap : CWinApp가 자동으로 호출하며 FromHandle에 의해서 생성된 어떠한 임시 CWnd 객체도 지운다.
GetSafeHwnd : 포인터가 NULL이면, m_hWnd, 또는 NULL을 반환된다.
CreateEx : 오버랩된 형태의 팝업 자식 윈도우를 생성하고 이것을 CWnd 객체에 추가한다
CreateControl : MFC 프로그램에서 CWnd 객체에 의해서 표현되는 OLE 컨트롤을 생성한다.


윈도우 상태 함수
IsWindowEnabled : 윈도우에 마우스와 키보드 입력이 가능한지를 결정한다.
EnableWindow : 윈도우에 마우스와 키보드로 입력을 가능하게 하거나 불가능하도록 한다.
GetActiveWindow : 활성 윈도우를 얻는다.
SetActiveWindow : 윈도우를 활성화한다.
GetCapture : 마우스를 캡쳐한 CWnd를 얻는다.
SetCapture : 모든 일련의 마우스 입력이 CWnd로 보내지도록 한다.
GetFocus : CWnd가 현재 입력 포커스를 가지고 있는지 검사한다.
SetFocus : 입력 포커스를 설정한다.
GetDestktopWindow : 윈도우 시스템의 desktop윈도우를 얻는다.
GetForegroundWindow : 포그라운드 윈도우의 포인터를 반환한다.
SetForegroundWindow : 생성된 윈도우의 스레드를 포그라운드로 설정하고 윈도우를 활성 화 한다.
GetIcon : 핸들에서 아이콘을 얻는다.
SetIcon : 핸들에 특정 아이콘을 설정한다.
GetWindowContextHelpId : 도움말 항목에 대한 식별자를 얻는다.
SetWindowContextHelpId : 도움말 항목에 대한 식별자를 지정한다.
ModifyStyle : 현재 윈도우의 스타일을 수정한다.
ModifyStyleEx : 확장된 윈도우의 스타일을 수정한다.


윈도우의 크기와 위치
GetWindowPlacement : 윈도우가 보여지는 상태와 정상(복귀된), 최소, 최대화된 윈도우의 위치를 얻는다.
SetWindowPlacement : 윈도우가 보여지는 상태와 정상(복귀된), 최소, 최대화된 윈도우의 위치를 설정한다.
IsIconic : CWnd가 최소화되었는지를 알아본다.
IsZoomed : CWnd가 최대화되었는지를 알아본다.
MoveWindow : CWnd의 위치또는 크기를 변경한다.
SetWindowPos : 크기, 위치, 순서, 팝업, 최상위 윈도우에 대한 것을 설정한다.
ArrangeIconicWindows : 모든 축소된(아이콘화 된) 자식 윈도우에 대한 것을 설정한다.
BringWindowToTop : CWnd를 오버랩 된 윈도우의 맨 처음으로 보낸다.
GetWindowRect : CWnd의 화면 좌표를 얻는다.
GetClientRect : CWnd 클라이언트 영역의 크기를 얻는다.


윈도우 참조 관련 함수
ChildWinddowFromPoint : 어떤 자식 윈도우가 특정 점을 포함하고 있는지를 알아낸다.
FindWindow : 윈도우의 이름과 클래스로 확인이 가능한 윈도우의 핸들을 반환한다.
GetNextWindow : 윈도우 관리자의 리스트에서 다음 또는 이전 윈도우를 반환한다.
GetOwner : CWnd의 소유자에 대한 포인터를 얻는다.
SetOwner : CWnd의 소유자를 변경한다.
GetTopWindow : CWnd에 속한 맨 첫 번째 자식 윈도우를 반환한다.
GetWindow : 이 윈도우와 특정한 관계를 가지고 있는 윈도우를 반환한다.
GetLastActivePopup : CWnd이 가지고 있는 팝업 윈도우가 가장 최근에 활성화 되었는지를 알아낸다.
IsChild : CWnd가 자식 윈도우인지 또는 다른 특정 윈도우의 후손인지를 알아낸다.
GetParent : CWnd의 부모 윈도우가 있다면 그 윈도우를 얻는다.
GetSafeOwner : 지정된 윈도우의 소유자를 얻는다.
SetParent : 부모 윈도우를 변경한다.
WindowFromPoint : 특정 점을 포함하는 윈도우를 알아낸다.
GetDlgItem : 특정 대화상자에서 특정 ID의 컨트롤을 얻는다.
GetDlgCtrlID : CWnd가 자식 윈도우이면, 자신의 ID 값을 반환한다.
SetDlgCtrlID : 윈도우에 윈도우 또는 컨트롤의 ID를 설정한다.
GetDescendantWindow : 모든 자식 윈도우를 검색하고 윈도우의 특징 ID를 반환한다.
GetParentFrame : CWnd 객체의 부모 프레임 윈도우를 얻는다.
SendMessageToDescendants : 윈도우의 모든 자식 윈도우에게 메시지를 보낸다.
GetToLevelParent : 윈도우의 최상위 부모를 얻는다.
GetToLevelOwner : 최상위 윈도우를 얻는다.
GetParentOwner : 자식 윈도우의 부모 윈도우에 대한 포인터를 반환한다.
GetTopLevelFrame : 윈도우의 촤상위 프레임 윈도우를 얻는다.
UpdateDialogControls : 대화상자의 버튼이나 다른 컨트롤들의 상태 갱신을 요구한다.
UpdateData : 대화상자의 데이터를 초기화하고 유효화한다.
CenterWindow : 부모 윈도우의 중앙에 윈도우를 위치시킨다.


갱신/그리기 함수
BeginPaint : 드로잉 작업을 수행하기 위해서 CWnd를 준비한다.
EndPaint : 드로임 작업을 마친다.
Print : 특정 디바이스 컨텍스트에 현재 윈도우를 그린다.
PrintClient : 특정 디바이스 컨텍스트에 모든 윈도우를 그린다.
LockWindowUpdate : 정해진 윈도우에 드로잉을 불가능하도록 하거나 다시 가능하도록 한다.
GetDC : 클라이언트 영역에 표시된 디바이스 컨텍스트를 얻는다.
GetDCEx : 클라이언트 영역에 표시된 디바이스 컨텍스트를 얻고, 그리는 도중에 클리핑이 가능하도록 한다.
RedrawWindow : 클라이언트 영역에서 특정 사각형이나 특정 영역을 갱신한다.
GetWindowDC : 툴바나, 메뉴, 스크롤 바를 포함한 모든 윈도우 영역에 대한 디바이스 컨 텍스트를 얻는다.
ReleaseDC : 클라이언트와 윈도우 디바이스 컨택스트를 해제함으로써, 다른 애플리케이션 이 사용할 수 있도록 한다.
UpdateWindow : 클라이언트 영역을 갱신한다.
SetRedraw : CWnd가 변화된 것을 다시 그리도록 설정하거나, 다시 그릴 수 없도록 설정 하는 역할을 한다.
GetUpdateRect : CWnd의 갱신 영역을 완전히 둘러싸는 가장 작은 사각형의 좌표를 얻는다.
GetUpdateRgn : CWnd의 갱신 영역을 얻는다.
Invalidate : 모든 클라이언트 영역을 무효화한다.
InvalidateRect : 현재의 갱신 영역에 사각형을 추가함으로써 정해진 사각형 내의 클라이언 트 영역을 무효화한다.
InvalidateRgn : 현재의 갱신 영역에 영역을 추가함으로써 정해진 영역내의 클라이언트 영 역을 무효화한다.
VaildateRect : 현재의 갱신 영역에서 사각형을 제거함으로써 정해진 사각형 내의 클라이 언트 영역을 유효화시킨다.
VaildateRgn : 현재의 갱신 영역에 영역을 제거함으로써 정해진 영역 내의 클라이언트 영 역을 유효화시킨다.
ShowWindow : 윈도우를 보이도록 하거나 숨긴다.
IsWindowVisible : 윈도우가 보이는지를 알아낸다.
ShowOwnedPopups : 윈도우가 가지고 있는 모든 팝업 윈도우를 보이게 하거나 숨긴다.
EnableScrollBar : 스크롤 바의 화살표를 사용가능하도록 하거나 불가능하게 한다.


좌표 매핑 관련 함수
MapWindowPoints : CWnd의 좌표계로부터 다른 윈도우의 좌표계로 지정된 점들을 매핑시 킨다.
ClientToSreen : 클라이언트 좌표계를 화면 좌표계로 변환한다.
ScreenToClient : 화면 좌표계를 클라이언트 좌표계로 변환한다.


윈도우 텍스트 함수
SetWindowText : 윈도우의 텍스트나 캡션 제목을 지정된 텍스트로 설정한다.
GetWindowText : 윈도우의 텍스트나 캡션 제목을 반환한다.
GetWindowTextLength : 윈도우의 텍스트나 캡션 제목의 길이를 반환한다.
SetFont : 현재의 폰트를 설정한다.
GetFont : 현재의 폰트를 얻는다.


스크롤 관련 함수
GetScrollPos : 스크롤 박스의 현재 위치를 얻는다.
GetScrollRange : 지정된 스크롤 바에 대한 최소, 최대의 스크롤 바 위치 값을 얻는다.
ScrollWindow : 클라이언트 영역의 내용을 스크롤한다.
ScrollWindowEx : 클라이언트 영역의 내용을 스크롤한다. (ScrollWindow과 비슷)
GetScrollInfo : 스크롤 바에 대한 SCROLLINFO 구조체 값을 얻는다.
GetScrollLimit : 스크롤 바의 한계 값을 얻는다.
SetScrollInfo : 스크롤 바에 대한 정보를 설정한다.
SetScrollPos : 스크롤 박스의 현재 위치를 설정하고, 설정이 되면, 새로운 위치를 나타내 도록 스크롤 바를 다시 그린다.
SetScrollRange : 지정된 스크롤 바에 대한 최소와 최대 위치 값을 지정한다.
ShowScrollBar : 스크롤 바를 보이거나 숨긴다.
EnableScrollBarCtrl : 스크롤 바의 컨트롤을 가능하게 하거나 불가능하도록 한다.
GetScrollBarCtrl : 스크롤 바 컨트롤을 반환한다.
RepositionBars : 클라이언트 영역에 컨트롤 바를 재위치 시킨다.


드래그-드롭 함수
DragAcceptFiles : 윈도우가 드래그된 파일을 받아들일 것인지를 결정한다.


Caret 관련 함수
CreateCaret : 시스템 캐럿으로 새로운 형태를 생성하고 캐럿의 소유권을 얻는다.
CreateSolidCaret : 시스템 캐럿으로 솔리드 캐럿을 생성하고 캐럿의 소유권을 얻는다.
CreateGrayCaret : 시스템 캐럿으로 회색 캐럿을 생성하고 캐럿의 소유권을 얻는다.
GetCaretPos : 특정 위치로 캐럿을 이동시킨다.
SetCaretPos : 화면에서 캐럿을 숨긴다.
HideCaret : 캐럿의 현재 위치에서 캐럿을 보이도록 한다.
ShowCaret : 캐럿의 현재 위치에서 캐럿을 보이도록 한다. 일단 캐럿이 화면에 나타나면 캐럿은 자동적으로 깜박거리게 된다.


대화상자 아이템 관련 함수
CheckDlgButton : 버튼 컨트롤 다음에 체크 표시를 하거나 버튼 컨트롤에서 체크 표시를 제거한다.
CheckRadioButton : 특정 라디오 버튼을 체크하고, 특정 버튼 그룹 내에 있는 모든 다른 라디오 버튼에서 체크 표시를 제거한다.
GetCheckedRadioButton : 버튼 그룹에서 현재 체크된 라디오 버튼의 ID를 반환한다.
DlgDirList : 파일이나 디렉토리에 대한 리스트로 리스트 박스를 채운다.
DlgDirListComboBox : 파일이나 디렉토리에 대한 리스트 콤보 박스를 채운다.
DlgDirSelect : 리스트 박스에서 현재 선택된 항목을 얻는다.
DlgDirSelectComboBox : 콤보 박스에서 현재 선택된 항목을 얻는다.
GetDlgItemInt : 지정된 대화상자에서 컨트롤이 사용하는 텍스트를 정수 값으로 변환한다.
GetDlgItemText : 컨트롤과 관련된 캡션이나 텍스트를 얻는다.
GetNextDlgGroupItem : 컨트롤 그룹 내의 다음 또는 이전 컨트롤을 찾는다.
GetNextDlgTabItem : 특정 컨트롤의 다음 또는 이전 컨트롤 중에서 WS_TABSTOP속성을 가 지는 컨트롤을 얻는다.
IsDlgButtonChecked : 버튼 컨트롤이 체크되었는지를 결정한다.
IsDialogItemMessage : 지정된 메시지가 모달리스(modeless)대화상자를 위한 것인지를 알아 내고, 만약에 그렇다면 그것을 처리한다.
SendDigItemMessage : 특정 컨트롤에 메시지를 보낸다.
SendDigItemInt : 지정된 대화상자에서 컨트롤이 사용하는 텍스트를 정수 값에 해당하는 문 자열로 설정한다.
SendDigItemText : 지정된 대화상자에서 컨트롤의 캡션이나 텍스트를 설정한다.
SubclassDlgItem : CWnd 컨트롤에 윈도우 컨트롤을 추가하고 CWnd의 메시지 맵을 통해 메시지를 배정하도록 한다.
ExecuteDlgInit : 해당 대화상자의 리소스로 초기화한다.
RunModalLoop : 모달 상태에 있는 윈도우의 메시지를 검색하고, 번역하거나, 처리한다.
ContinueModal : 윈도우 모달 상태를 지속시킨다.
EndModalLoop : 윈도우 모달 상태를 마친다.


메뉴 함수
GetaMenu : 특정 메뉴에 대한 포인터를 얻는다.
SetMenu : 현재의 메뉴를 지정된 메뉴로 설정한다.
DrawMenuBar : 메뉴 바를 다시 그린다.
GetSystemMenu : 애플리케이션이 컨트롤 메뉴를 복사하거사 수정하도록 참조하는 것을 허용한다.
HiliteMenuItem : 최상위 메뉴 아이템에서 선택된 부분을 하이라이트하거나 해제한다.


툴팁 함수
EnableToolTips : 툴팁 컨트롤을 사용가능하도록 한다.
CancelToolTips : 툴팁 컨트롤을 사용 불가능하도록 한다.
FilterToolTipMessage : 대화상자에서 컨트롤과 관련된 제목이나 텍스트를 얻는다.
OnToolHitTest : 포인터가 특정 도구의 사각형 경계(보통 툴바 영역)안에 있는지를 알아내 고 그 도구에 대한 정보를 얻는다.


타이머 관련 함수
SetTimer : 시작될 때 WM_TIMER 메시지를 보내는 시스템 타미머를 설치한다.
KillTimer : 타이머를 해제한다.


경고 함수
FlashWindow : 윈도우를 한 번 반짝이게 한다.
MessageBox : 애플리케이션이 제공하는 캡션과 메시지를가지고 있는 윈도우를 생성하고 화면에 출력한다.


윈도우 메시지 관련 함수
GetCurrentMessage : 윈도우가 현재 처리하고 있는 메시지의 포인터를 반환한다. OnMessage 류의 메시지 핸들러 멤버 함수 내부에서만 호출되어야한다.
Default : 디폴트 윈도우 프로시저를 호출하며, 이것은 애플리케이션에게 어떤 윈도우 메 시지도 디폴트 형태로 처리하도록 한다.
PreTranslateMessage : TranslateMessage와 DispatchMessage 윈도우 함수에서 처리되기 전 에 윈도우의 메시지를 필터링하기 위해서 CWinApp가 사용한다.
SendMessage : CWnd 객체에 메시지를 보내고 메시지를 처리할 때 까지 반환되지 않는다.
PostMessage : 애플리케이션 큐에 메시지를 위치시키고, 윈도우가 메시지를 처리할 때까 지 기다리지 않고 바로 반환한다.
SendNotifyMessage : 특정 메시지를 윈도우에 보내고 호출한 스래드가 윈도우를 생성했는 지에 따라서, 가능한 빨리 반환한다.


클립보드 관련 함수
ChangeClipboardChain : 클립보드 뷰어의 체인으로부터 CWnd를 제거한다.
SetClientboardViewer : 클립보드의 내용이 변하면 윈도우의 체인에 CWnd를 추가한다.
SetClipboard : 클립보드를 연다. 다른 애플리케이션이 윈도우의 CloseClipboard 함수를 호 출할 때까지 클립보드를 수정하지 않도록 한다.
GetClipboardOwner : 클립보드의 현재 소유자에 대한 포인터를 얻는다.
GetOpenClipboardWindow :현재 클립보드가 열려진 윈도우에 대한 포인터를 얻는다.
GetClipboardViewer : 클립보드 뷰어의 체인에서 처음 윈도우에 대한 포인터를 얻는다.


OLE 콘트롤
SetProperty : OLE 컨트롤 프로퍼티를 설정한다.
OnAmbientProperty : 환경 프로퍼티 값을 구현한다.
GetControlUnknown : 알려지지 않은 OLE 컨트롤에 대한 포인터를 얻는다.
GetProperty : OLE 컨트롤 프로퍼티를 얻는다.
InvokeaHelper : OLE 컨트롤의 메소드나 프로퍼티를 호출한다.


오버라이드 가능한 함수
WindowProc : CWnd에 대한 디폴트 프로시저를 제공한다. 디폴트로 메시지 맵을 통해서 메시지를 처리하게 된다.
DefWindowProc : 디폴트 윈도우 프로시저를 요구하며, 이것은 애플리케이션이 처리하지 않은 모든 윈도우 메시지에 대해서 디폴트 처리를 하도록 한다.
PostNcDestroy : 윈도우가 소멸된 후에 디폴트 OnNcDestroy 함수에 의해서 호출되는 가상 함수이다.
OnChildNotify : 컨트롤 통지 메시지를 처리하기 위한 기회를 컨트롤에게 주기 위해서 부 모 윈도우에 의해 호출된다.
DoDateExchange : 대화상자의 데이터 교환이나 유효화 검사를 위해서 UpdateData에 의해 서 호출된다.


초기화 메시지 핸들러
OnInitMenu : 메뉴가 활성화될 때 호출된다.
OnInitMenuPopup : 팝업 메뉴가 활성화될 때 호출된다.


시스템 메시지 핸들러
OnSysChar : 사용자가 컨트롤 문자로 변환하기 위해서 호출된다.
OnSysCommand : 사용자가 컨트롤 메뉴에서 항목을 선택하거나, 사용자가 최대화 또는 최 소화 버튼을 누를 때 호출된다.
OnSysDeadChar : 키 입력을 시스템의 Dead 문자((')등이 추가된 문자)로 변환할 때 호출 된다.
OnSysKeyDown : 사용자가 Alt 키를 누르고 다른 키를 누를 때 호출된다.
OnSysKeyUp : 사용자가 Alt 키를 누른 상태로 다른 키를 놓을 때 호출된다.
OnCompacting : 윈도우 시스템에서 시스템 메모리가 부족한 경우에 호출된다.
OnDevModeChange : 사용자가 디바이스의 모드 설정을 바꿀 때 최상위 윈도우가 호출된다.
OnFontChange : 폰트 리소스의 풀이 변할 때 호출된다.
OnPaletteChanged : 애플리케이션이 논리 팔레트를 적용할 것임을 다른 애플리케이션들에 게 알린다.
OnPaletteChanging : 윈도우가 논리 팔레트를 적용할 것임을 다른 애플리케이션들에게 알 린다.
OnSysColorChange : 시스템의 컬러 설정에 변화가 있을 때 최상위 윈도우가 호출한다.
OnWindowPosChanging : SetWindowPos나 다른 윈도우-관리 함수의 호출의 결과로 크기, 위치, 또는 Z-Order가 변하려 할 때 호출된다.
OnWindowPosChanged : SetWindowPos나 다른 윈도우-관리 함수의 호출의 결과로 크기, 위치, 또는 Z-Order가 변했을 때 호출된다.
OnDropFiles : 사용자가 드롭된 파일을 실행하기 위한 프로그램으로 등록된 윈도우 위에서 왼쪽 마우스 버튼을 놓을 때 호출된다.
OnSpoolerStatus : 프린트 관리자의 작업이 추가되거나 삭제될 때마다 프린트 관리자가 호출한다.
OnTimeChange : 시스템 시간 설정이 변경되면 최상위 윈도우가 호출한다.
OnWinIniChange : 윈도우의 초기화 파일인 WIN.INI가 변경되면 최상위 윈도우가 호출한다.


일반 메시지 핸들러
OnCommand : 사용자가 명령을 선택할 때 호출된다.
OnActivate : CWnd가 활성화되거나 비활성화될 때 호출된다.
OnActivateApp : 애플리케이션이 활성화되려고 하거나 비활성화되려고 하는 경우에 호출 된다.
OnCancelMode : CWnd가 마우스 캡쳐와 같은, 어떤 내부적인 모드를 취소하는 것을 허용 하기 위해서 호출된다.
OnChildActivate : MDI의 자식 윈도우에서 CWnd의 크기나 위치가 변경되거나 CWnd가 활 성화될 때 호출된다.
OnClose : CWnd이 종료되는 신호로서 호출된다.
OnCreat : 윈도우 생성의 일부분으로서 호출된다.
OnCtlColor : 컨트롤이 그려지려 할 때 CWnd가 컨트롤의 부모 윈도우이면 호출된다.
OnDestroy : CWnd가 소멸될 때 호출된다
OnEnable : CWnd가 사용 가능하거나 불가능할 때 호출된다.
OnEndSession : 세션이 종료될 때 호출된다.
OnEnterIdle : 모달 대화상자나 메뉴가 유휴(idle)상태에 들어갈 때 애플리케이션의 메인 윈 도우 프로시저에서 호출된다.
OnEraseBkgnd : 윈도우의 바탕이 지워져야 할 때 호출된다.
OnGetMinMaxInfo : 윈도우가 최대화된 위치나 크기, 또는 최소 또는 최대 트랙킹 크기를 알아야 할 때마다 호출된다.
OnIconEraseBkgnnd : CWnd가 최소화되거나 아이콘이 그려지기 전에 아이콘의 배경을 채 워야 하는 경우에 호출된다.
OnKillFocus : CWnd가 입력포커스를 잃기 전에 호출된다.
OnMenuChar : 사용자가 현재 메뉴에서 이미 정의된 코드와 대응이 안되는 문자를 눌렀을 때 호출된다.
OnMenuSelect : 사용자가 메뉴 아이템을 선택할 때 호출된다.
OnMove : CWnd의 위치가 변경된 후에 호출된다.
OnMoving : 사용자가 CWnd 객체를 이동하고 있음을 나타낸다.
OnDeviceChange : 디바이스나 컴퓨터의 하드웨어 설정이 변경되었음을 알려준다.
OnStyleChanged : ::SetWindowLong 윈도우 함수를 사용하여 하나나 혹은 그 이상의 윈도우 의 스타일이 변했음을 알려준다.
OnStyleChanging : ::SetWindowLong 윈도우 함수를 사용하여 하나나 혹은 그 이상의 윈도 우의 스타일이 변하려 하는 것을 알려준다.
OnPaint : 윈도우의 일부분을 다시 그리기 위해서 호출된다.
OnParentNotify : 자식 윈도우가 생성되거나 소멸될 때, 또는 커서가 자식 윈도우 위에 있 는 동안 마우스 버튼을 클릭하는 경우에 호출된다.
OnQueryDragIcon : 최소화된 CWnd가 사용자에 의해서 드래그될 때 호출된다.
OnQueryEndSession : 사용자가 윈도우의 세션 종료를 선택하는 경우에 호출된다.
OnQueryNewPalette : CWnd가 입력 포커스를 받게됨을 알려준다.
OnQueryOpen : CWnd가 아이콘이거나 사용자가 아이콘이 열려지지기를 요구할 때 호출된다.
OnSetFocus : CWnd가 입력 포커스를 얻은 후에 호출된다.
OnShowWindow : CWnd가 감추어지거나 혹은 보여질 때 호출된다.
OnSize : CWnd의 크기가 변한 후에 호출된다.
OnSizing : 사용자가 사각형의 크기를 다시 조정하고 있음을 나타낸다.
OnStyleChanged : 윈도우의 하나나 혹은 그 이상의 스타일이 변한 것을 나타낸다.
OnStyleChanging : 윈도우의 하나나 혹은 그 이상의 스타일이 변하려 하는 것을 나타낸다.


컨트롤 메시지 핸들러
OnCharToItem : LBS_WANTKEYBOARDINPUT 스타일을 가지고 있는 리스트 박스에 의해서 WM_CHAR에 대한 응답으로 호출된다.
OnCompareItem : 정렬이 가능한 owner draw 형태의 콤보 박스나 리스트 박스에서 새로운 아이템의 상대 위치를 지정하기 위해서 호출된다.
OnDeleteItem : owner draw 형태의 리스트 박스나 콤보 박스가 소멸되거나 아이템이 컨트 롤에서 제거될 때 호출된다.
OnDrawItem : owner draw 형태의 버튼 컨트롤, 콤보 박스 컨트롤, 리스트 박스 컨트롤이 다시 그려져야 할 때 호출된다.
OnGetDlgCode : 컨트롤이 화살표 키와 Tab 키에 대한 입력을 수행할 수 있도록 하기 위 해서 호출된다.
OnMeasureItem : 컨트롤이 생성될 때 owner draw 형태의 콤보 박스, 리스트 박스, 또는 메뉴 아이템을 요구한다. CWnd는 윈도우에게 컨트롤의 크기를 알려준다.
SendChildNotifyLastMsg : 부모 윈도우가 자식 윈도우에게 통보 메시지를 제공하여 자식 윈도우가 작업을 수행할 수 있도록 한다.
OnWndMsg : 윈도우의 메시지가 핸들링되고 있는 것을 나타낸다.
ReflectLastMsg : 자식 윈도우의 마지막 메시지를 나타낸다.
OnVKeyToItem : WM_KEYDOWN 메시지에 대하여 CWnd가 소유한 리스트 박스가 호출된다.


입력 메시지 핸들러
OnChar : 키 입력이 시스템 문자가 아닌 문자로 변환될 때 호출된다.
OnDeadChar : 키 입력이 시스템 문자가 아닌 Dead 문자로 변환될 때 호출된다.
OnHSroll : 사용자가 CWnd의 수평 스크롤 바를 클릭하는 경우에 호출된다.
OnKeyDown : 시스템 키가 아닌 키보드가 눌러 졌을 때 호출된다.
OnKeyUp : 시스템 키가 아닌 키보드가 놓을 때 호출된다.
OnLButtonDblClk : 사용자가 왼쪽 버튼을 더블 클릭 했을 때 호출된다.
OnLButtonDown : 사용자가 왼쪽 버튼을 눌렀을 때 호출된다.
OnLButtonUp : 사용자가 왼쪽 버튼을 놓을 때 호출된다.
OnMButtonDblClk : 사용자가 가운데 버튼을 더블 클릭 했을 때 호출된다.
OnMButtonDown : 사용자가 가운데 버튼을 눌렀을 때 호출된다.
OnMButtonUp : 사용자가 가운데 버튼을 놓을 때 호출된다.
OnMouseActivate : 커서가 비활성화된 윈도우에 있고 사용자가 마우스 버튼을 누를 때 호출된다.
OnMouseMove : 마우스커서가 움직일 때 호출된다.
OnRButtonDblClk : 사용자가 오른쪽 버튼을 더블 클릭 했을 때 호출된다.
OnRButtonDown : 사용자가 오른쪽 버튼을 눌렀을 때 호출된다.
OnRButtonUp : 사용자가 오른쪽 버튼을 놓을 때 호출된다.
OnSetCuror : 마우스 입력이 캡쳐되지 않고 마우스가 윈도우에서 커서를 움직이게 하려면 호출된다.
OnTimer : SetTimer에서 정해진 간격마다 호출된다.
OnVScroll : 사용자가 윈도우의 수직 스크롤 바를 클릭할 때 호출된다.
OnCaptureChanged : 마우스 캡쳐를 놓치는 윈도우 메시지를 보낸다.


비 클라이언트 영역 메시지 핸들러
OnNcActivate : 비 클라이언트 영역이 활성화된 상태인지 비활성화된 상태인지를 가리키 기 위해서 변환이 필요한 경우 호출된다.
OnNcCalcSize : 비 클라이언트 영역의 크기와 위치가 계산될 때 호출된다.
OnNcCreate : 비 클라이언트 영역이 생성될 때 OnCreate 보다 먼저 호출된다.
OnNcDestroy : 비 클라이언트 영역이 소멸될 때 호출된다.
OnNcHitTest : CWnd가 커서를 포함하고 SetCapture로 마우스 입력을 캡쳐할 때 마우스가 움직일 때 마다 윈도우에 의해서 호출된다.
OnNcLButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 더블 클릭 했을 때 호출된다.
OnNcLButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 눌렀을 때 호출된다.
OnNcLButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 왼쪽 마우스 버튼을 놓을 때 호출된다.
OnNcMButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 더블 클릭 했을 때 호출된다.
OnNcMButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 눌렀을 때 호출된다.
OnNcMButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 가운데 마우스 버튼을 놓을 때 호출된다.
OnNcMouseMove : 커서가 CWnd의 비 클라이언트 영역 내에서 이동할 때 호출된다.
OnNcPaint : 비클라이언트 영역이 다시 그려지기를 요구할 때 호출된다.
OnNcRButtonDblClk : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마우스 버튼을 더블 클릭 했을 때 호출된다.
OnNcRButtonDown : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마우스 버튼을 눌렀을 때 호출된다.
OnNcRButtonUp : 커서가 CWnd의 비 클라이언트 영역 내에 있는 동안 사용자가 오른쪽 마 우스 버튼을 놓을 때 호출된다.


MDI 메시지 핸들러
OnMDIActivate : MDI child 윈도우가 활성화되거나 비활성화될 때 호출된다.


클립보드 메시지 핸들러
OnAskCbFormatName : 클립보드의 소유자가 클립보드의 내용을 나타낼 때 클립보드 뷰어 애플리케이션에 의해서 호출된다.
OnChangeCbChain : 특정 윈도우가 체인에서 제거되었는지를 통지한다.
OnDestroyClipboard : 클립보드가 윈도우 EmptyClipboard 함수의 호출에 의해서 비워지는 경우에 호출된다.
OnDrawClipboard : 문장이 변경되었을 때 호출된다.
OnHScrollClipboard : 클립보드의 소유주가 클립보드의 이미지를 스크롤해야 하고 적절한 섹션을 무효화할 때 호출되며, 스크롤 바의 값들을 갱신한다.
OnPaintClipboard : 클립보드 뷰어의 클라이언트 영역이 다시 그려져야 할 때 호출된다.
OnRenderAllForamts : 소유주 애플리케이션이 파괴되고 있고 모든 포맷들을 다시 만들 필 요가 있을 때 호출된다.
OnSizeClipboard : 클립보드 뷰어 윈도우의 클라이언트 영역의 크기가 변하는 경우에 호출 된다.
OnVSrollClipboard : 소유주가 크립보드 이미지 스크롤해야 하는 경우에 호출되며, 적절한 섹션을 무효화하고, 스크롤바 값들을 갱신한다.


메뉴 루프 통지
OnEnterMenuLoop : 메뉴의 모달 루프가 수행되는 경우에 호출된다.
OnExitMenuLoop : 메뉴의 모달 루프가 마치는 경우에 호출된다.

<출처: http://blog.daum.net/badog/4458012>
반응형

LNK4070

Posted on 2009. 7. 3. 18:15
Filed Under Visual C++

DLL 빌드 중 발생

/OUT:filename directive in .EXP differs from output filename 'filename'; ignoring directive
  • 원인 : Link 탭에 설정한 output 이름과 .def 파일내의 output 이름이 다르게 설정
  • 해결 : .exp 파일을 만들 때 NAME 또는 LIBRARY 문에 지정한 filename이 기본적으로 선택되었거나 /OUT 옵션으로 지정한 출력 filename과 다릅니다. 개발 환경에서 출력 파일의 이름을 변경했는데 프로젝트의 def 파일이 업데이트되지 않은 경우 이 경고가 발생합니다. 이 경고를 해결하려면 .def 파일을 수동으로 업데이트하십시오. 결과로 생성된 DLL을 사용하는 클라이언트 프로그램에 문제가 발생할 수 있습니다.
  • .def 파일의 읽기속성을 해제한 후 수동 수정
반응형

비트맵 마스크 원리 [링크]

Posted on 2009. 7. 1. 15:28
Filed Under Visual C++

반응형

[VS2008 IDE] 파일(File)과 필터(Filter)

Posted on 2009. 6. 29. 13:09
Filed Under Visual C++

솔루션 탐색기에서 파일보기 모드와 필터보기 모드가있다.
전환방법은 솔루션 탐색기의 맨 위의 툴바중 [모든 파일 보기]버튼의 토글..

파일모드일때는 프로젝트 > 추가 > '새 폴더'
필터모드일때는 프로젝트 > 추가 > '새 필터'

메뉴가 활성화된다.


파일모드 -> 파일이 물리적으로 프로젝트 폴더 아래에 추가된다. 그외 폴더의 파일은 '참조'식으로 추가된다(아이콘이 다른 모양임)
필터모드 -> 맘대로 추상적인 구조를 만들수 있다. 물리적으로 프로젝트 폴더 이외에 존재하는 파일이 있을 수 있다.

개인적으로 필터모드가 편하다.
왜냐? VC6부터 길들여져왔으니까..


반응형

Visual Studio 컴파일러 버젼(_MFC_VER, _MSC_VER)

Posted on 2009. 6. 26. 18:28
Filed Under Visual C++

Visual Studio 컴파일러 버젼(_MFC_VER, _MSC_VER)

C++버전별 정보
4.0 1000
5.0 1100
6.0 1200
7.1(2003) 1310
8.0(2005) 1400
9.0(2008) 1500

버전값으로 전처리기를 통해 컴파일 오류 예방

#if defined(_MSC_VER) && _MSC_VER < 1200
 ....
#else
 .....
#endif

<정보출처: http://blog.naver.com/kiti1782/50046307614 >


  

반응형

[VS2003이상] 멀티코어 CPU를 이용한 빌드 속도 향상 옵션 설정법 [펌]

Posted on 2009. 6. 23. 15:15
Filed Under Visual C++

Visual Studio 듀얼코어, 쿼드코어를 활용한 프로그래밍 컴파일(Complie) 속도 향상방법을 소개해드립니다.

기본옵션으로 Visual Studio 2005, 2008 에서는 컴파일 과정에서는 멀티코어 CPU 를 지원하지 않습니다.

따라서 듀얼 코어에서 컴파일을 하면 50%의 CPU 만을 사용하여 멀티 코어 CPU를 사용하는 장점이 없는데 다음과 같은 과정으로 멀티 코어 시피유를 최대한 활용할 수 있습니다.


코드의 양이 크면 클수록 그 효과는 크게 작용됩니다.
<출처: http://a.tk.co.kr/522 >



/MP 옵션은 /Gm 옵션과 충돌
을 합니다. 보통 디버그 모드에서는 /Gm 옵션이 활성화 되어 있는데 이 상태에서 /MP 옵션을 설정하면 먹히지 않습니다.

그래서 디버그 모드에서는 그림 C에 나와 있는 최소 다시 빌드 가능아니오로 해야합니다.

반응형

About

by 쑤기c

반응형