자잘한 설명은 생략하고 깔끔하게 적는다!

콘솔 어플리케이션처럼 기본 아이콘이 제공되지 않는 프로그램에 한하며 MFC 등은 적용 방식이 다르다!



1. 프로젝트 폴더 내이든 어디든 일단 변경하고픈 아이콘을 준비한다


2. 리소스파일->추가->리소스(R)... 클릭


3. 아이콘 가져오기


4. 컴파일



끝.

거두절미

예시는 벡터


std::vector<템플릿> 변수1;

for( std::vector<템플릿>::iterator 변수2 = 변수1.begin(); 변수2 != 변수1.end(); 변수2++ )

{

    *변수2.작업();

}


자세한 설명은 생략한다.

정말 자주 쓰는 디자인 패턴 중 하나인 싱글톤 패턴이다. 개인적으로 디자인 패턴 중에서는 제일 구현도 쉽고 활용도도 높지 않나 한다.

웬만한 객체지향 언어는 지원이 되므로 어떤 형식을 가지는지 이해하면 타 언어(Java 등)에서도 활용 가능하다.

 'static'으로 생성된 객체의 특징인 "프로그램이 실행 시 함께 할당되며(일반적으로), 프로그램 종료까지 메모리에서 해제되지 않는다"는 점을 이용하며,

단 하나의 객체만 만들고 실행 내내 해당 객체만 불러오는 특징이 있다. 그렇기 때문에 보통 프로그램 내에서는 매니저 클래스로 많이 사용된다.

 사용되는 예시는 다음과 같은 형식이다. 사용 시에는 Singleton::Instance->함수() 등 다양한 방법이 있다


class Singleton

{

public:

static Singleton* Instance()

{

if( !m_pInstance ) // 인스턴스 할당

m_pInstance = new Singleton;


return m_pInstance;

}


private:

Singleton()

{

//초기화

}


~Singleton()

{

// 인스턴스 자체는 new로 생성하기 때문에 자동 삭제된다

};


static Singleton* m_pInstance;

};



시험공부하다가 진짜 잉여로운 발상에 만든 프로그램. 출첵 이벤트 계속 참여하기가 귀찮아서 만들었다

어떤 함수 썼는지는 뻔하고 입력 위치는 거의 하드코딩으로 했음. 스샷 보다시피 MFC로 만듦.

좀 더 유연하게 만들려고 하면 할 수는 있는데 귀찮아서 여기까지만 함.

잘하면 낚시 매크로도 만들 수 있지 않을까 함. 이건 좀 더 나중에 시간이 나면 해볼 예정...

나 모험가 달인작 끝내기 전에는 가능하기나 할까 모르겠다



프로그램 자체는 이런 느낌. 아이디 비번 접속시간 적고 고고싱 누르면 클라이언트 켜고, 게임시작 누르고,

호환성체크 넘어가고 로그인하고 캐릭터 선택해서 들어가서 지정한 시간만큼 대기 후 자동으로 꺼지도록 함.

악용하면 충분히 악용할 수 있고, 블로그에 올려도 어차피 모르는 사람이 만든 프로그램을

꺼리낌없이 막 쓸 배짱 있는 사람도 없을 것이기 때문에 공개는 하지 않겠음.



그럼 뿅

#include <iostream>


using namespace std;


class Root

{

public:


virtual void Function() = 0;

};


class Node1 : public Root

{

public:


void Function()

{

cout << "나는 자식 1이당~~~"  << endl;

}

};


class Node2 : public  Root

{

public:


void Function()

{

cout << "나는 자식 2이당~~~"  << endl;

}

};


int main()

{

int i;

Root * Test = 0;


cin >> i;


switch( i )

{

case 1:

Test = new Node1();

break;

case 2:

Test = new Node2();

break;

}


Test->Function();


delete Test;


return 0;

}

참고 : http://msdn.microsoft.com/ko-kr/library/7sx52ww7.aspx



TRACE 매크로

 비주얼 스튜디오 내 콘솔 창에서 확인할 수 있게 하는 매크로. 매크로이지만 뒤에 세미콜론(;)이 붙는다.

Debug빌드 시에만 출력되며, Release로 빌드하면 해당 부분이 사라진다.




스레드 내부에 TRACE 매크로를 위와 같이 사용해 보았다.

printf 거의 동일하게 사용되는 것을 알 수 있다.




출력 창에 이렇게 나오게 된다.

 리스트 컨트롤은 목록 형식의 컨트롤로, 리스트박스와 약간 다른 점이 있습니다. 예를 들어 상단에 열 제목을 추가하는 등의 동작이 가능합니다. 이번에는 리스트 컨트롤을 사용하는 방법에 대해 알아보겠습니다.




우선 대화상자에 리스트 컨트롤을 선택하고 적당하게 배치합니다.



Properties에서 View 항목을 Report로 바꾸어 줍니다.




바꾸어 주었으면 열의 헤더가 생긴 것을 확인할 수 있습니다.




리스트 컨트롤을 선택하고 우측 마우스를 클릭하여 변수 추가를 선택해 줍니다.




멤버 변수 추가 마법사에서 원하는 변수 이름을 적고 '마침'버튼을 클릭합니다.




그러면 DoDataExchange 함수에 빨간 박스와 같은 코드가 작성된 것을 볼 수 있습니다.



이후 InitDialog 함수에서 아래 코드와 같이 작성합니다.



// 헤더 설정

LV_COLUMN m_lCol; // 열의 헤더 부분을 담당합니다.


m_lCol.mask = LVCF_TEXT | LVCF_WIDTH; // 변경할 부분을 마스킹하여 설정합니다.


m_lCol.pszText = "테스트1"; // 출력될 문자열입니다.

m_lCol.cx = 100; // 출력될 가로 폭입니다.

m_cList.InsertColumn( 0, &m_lCol ); // 열의 번호와 구조체의 주소를 넘깁니다.


m_lCol.pszText = "테스트2";

m_lCol.cx = 100;

m_cList.InsertColumn( 1, &m_lCol );


// 값 삽입

LV_ITEM m_lItem;


m_lItem.mask = LVIF_TEXT;


m_lItem.pszText = "아이템1";

m_lItem.iItem = 0;

m_lItem.iSubItem = 0;

m_cList.InsertItem( &m_lItem );


m_lItem.pszText = "아이템2";

m_lItem.iItem = 1;

m_lItem.iSubItem = 0;

m_cList.InsertItem( &m_lItem );


// 비어 있는 열의 값 추가(2번째)

m_lItem.pszText = "아이템3";

m_lItem.iItem = 0;

m_lItem.iSubItem = 1;

m_cList.SetItem( &m_lItem );


m_lItem.pszText = "아이템4";

m_lItem.iItem = 1;

m_lItem.iSubItem = 1;

m_cList.SetItem( &m_lItem );




컴파일하면 이렇게 리스트가 뜨는 것을 볼 수 있습니다.

같은 컨트롤의 개수가 많을 때 같은 이벤트 처리기를 여러개 만들 경우, 보기도 안좋고 번거로운 작업이 필요합니다.

이벤트 처리기를 한 데 묶어 쓰는 방법입니다.




우선 테스트를 위해 버튼을 네개 만들어 두었습니다. 각각의 ID는 IDC_BUTTON1~IDC_BUTTON4까지입니다.




대화상자 cpp파일 내에 처리 내용이 담긴 함수를 만들어 줍니다. 인자는 UINT 형 변수이고 반환형은 없어야 합니다.

인자로 ID가 넘어와 이걸 통해 컨트롤 간의 구분이 가능합니다. 함수의 원형은 헤더 파일에 선언합니다.




메시지 맵에 빨간 박스와 같이 적습니다. ON_COMMAND_RANGE 매크로인데, 첫번째 인수는 시작 ID, 두번째 인수는 끝 ID, 세번째 인수는 반환형이 void이고 인자가 UINT인 함수의 주소를 넘겨줍니다.

그러면 IDC_BUTTON1~IDC_BUTTON4까지의 컨트롤에 이벤트가 발생할 경우 해당 함수가 호출됩니다.




잘 작동하는 것을 볼 수 있습니다.

 설치할 적에는 창이 잘 떴는데, 제거를 하기 위해 인스톨 파일을 다시 실행하니

완전 투명하게 뜨거나 오른쪽 상단 구석에 검은 사각형만 떠서 골머리를 앓았습니다.

닷넷을 다시 깔아봐도 안되고, 시스템 복원을 해봐도 안되고, 무엇이 문제였나 했는데

설마하고 그래픽 카드 드라이버 설치하니 해결 -_-;;; 나의 오전을 돌려줘..

에디트박스의 글자 크기를 변경하고 싶을 때는 CFont를 이용하면 된다.

우선 CFont의 인스턴스를 전역에 선언해둔 후(지역에 선언하면 이후 커서만 커지고 글자 크기는 그대로가 된다)

컨트롤을 GetDlgItem으로 가져온 후, SetFont로 앞에서의 인스턴스의 주소를 넘겨주면 된다.


CFont g_editFont;

g_editFont.CreatePointFont( 200, TEXT( "굴림" ) );

GetDlgItem( IDC_EDIT_NUM )->SetFont( &g_editFont );



<정상적으로 된 경우>


<폰트 인스턴스를 지역에 선언한 경우>

+ Recent posts