http://blog.naver.com/rozio/100013783967

SBCS(Single-byte character set)
SBCS = ASCII ( 1byte), 하나의 문자를 저장하는데 한 바이트만 사용합니다.

MBCS(Multibyte character set)
한국어, 중국어, 일본어 등을 표현하기 위하여 여러바이트를 사용합니다.
그러나 실제로 여러 바이트를 사용하는 일은 없고 DBCS(double-byte character set)라고 해서
2바이트 만을 사용합니다.

UNICODE
국제 표준으로 전세계문자를 2 바이트에서 사용하자는 목적에서 만들어졌습니다.

unicode 상에서는 어떤 문자열을 대입할때 항상 문자열 앞에 L을 붙이게 됩니다.

예)
CString strTemp = L"이것은 연습입니다.";

하지만 이문자열이 unicode 가 아니라 SBCS 나 MBCS에서 사용되어질 수 있는
코드라면 호환이 가능하기 위해서 _T 를 사용합니다.(TEXT 와 같습니다.)

예)
CString strTemp = _T("이것은 연습입니다."); or
CString strTemp = TEXT("이것은 연습입니다.");

이렇게 하면 컴파일 타임에 _UNICODE로 정의가 안되어 있다면

CString strTemp = "이것은 연습니다.";
와 동일하며, unicode환경에서 컴파일 한것이라면
CString strTemp =L"이것은 연습입니다.";
와 동일합니다.

그리고 TCHAR는 SBCS/MBCS 컴파일 환경에서는 char 로 인식하지만
unicode 환경에서는 wchar_t 로 대체됩니다.

위와같은 환경은
Projects -> Settings -> C/C++tab -> preprocessor Definitions 에
보통 _MBCS가 정의되어있습니다.

TCHAR.h 파일에 마지막 정도에 _T(x)에 대한 정의가 있습니다.

Posted by 빨강토끼
,
이전커서위치로 이동(back) : Alt + ,
이전커서위치로 이동(forword) : Alt + .

함수안으로 이동 Ctrl + = or Ctrl + 마우스왼쪽버튼더블클릭

-소스인사이트를 사용하다보면 해더의 내용이 궁금할때가 있습니다.
관련 함수를 선택후에 마우스오른쪽버튼을 클릭하면 Jump To Prototype... 을 선택하면
해더내용이 보여집니다.

-함수를 호출한 코드 탐색
함수를 선택후 마우스오른쪽 클릭 후 Jump To Caller 선택

-프로젝트전체에서 특정 함수나 변수등을 찾기 위해서 F7 키를 누른다

-현재 파일에서 특정 함수나 변수를 찾기위해선 F8 키를 누른다.



Posted by 빨강토끼
,
C# 3.0 이 나오는 마당에 불필요할것 같지만 메모해 봅니다.

제네릭 : 클래스나 메서드 정의 코드에서 데이터 형식이 결정되지 않고
형식 매개 변수에 따라 컴파일 시에 실제 형식이 결정된다.
http://redrebel.egloos.com/3936385

반복기 : foreach에서 사용 하는 IEnumerable과 IEnumerator 인터페이스를
자동으로 구현해 준다.

Nullable : 값 형식의 변수들이 null 값을 가질 수 있도록 하는 특수한 형식이다.

무명 메서드 : 대리자의 값이 필요한 정소에서 표준적인 메서드의 이름 대신
메서드 본체를 직접 정의한다.

partial 클래스 : partial 키워드를 사용하면 하나의 클래스(또는 인터페이스나 구조체)를
둘 이상의 파일로 나누어서 작성할 수 있다.
Posted by 빨강토끼
,
아래내용은 한빛미디어에서 출판된 조성진님의
ASP.NET 2.0 웹프로젝트와 실전 프로그래밍 의 내용을
참고하여 글을 썼습니다.

우연히 마소에서 제네릭이라는 것에 대하여 소개를 했던 기억이 있습니다.
그땐 이게 머지? 하며 그냥 넘어갔는데.

다시 제네릭이라는것을 접하게 되었습니다.
제네릭 컬렉션
제네릭 클래스
제네릭 메서드

우선 다음과 같은 코드의 소스가 있다고 하면은

ArrayList items = new ArrayList();

items.Add("문자열");
items.Add(200);

foreach(string val in items)
    Response.Write(val + "<br>");

이코딩은 두가지 문제점이 있습니다.
첫번째 문제점은 이렇게 코딩이 되어있다면 컨파일을 하는 중에는 에러가 생기지 않습니다.
하지만 실행 시에 에러가 발생합니다.
200 이라는 숫자가 ArrayList 에 들어가기 때문에
foreach 문이 실행중에 숫자를 string 형으로
변환하려고 하는중에 발생되는 에러입니다.
컴파일시에 에러가 발견되지 않고 실행을 해보고 나서야
에러가 발견된다는 것은 소프트웨어의 생산 능률을
저하시키는 요인이 될 수 있습니다.

두번째 문제점은 형식 변환으로 인한 퍼포먼스의 저하입니다.
ArrayList는 저장하는 모든 개체를 object 형식으로 변환하기 때문에
저장될때 형변환이 발생하고, 특히 int형을 object형으로 변환할 때 필요한
박싱(boxing) 처리가 수행되기 때문에 더 부담이 큽니다.
또한 다시 object 형을 string 형으로 다시 바꾸는 역변환이 발생합니다.
위 예제처럼 간단한 처리에는 표시가 나지않지만
ArrayList에 저장되는 데이터가 많아질 경우에는 반복적인 형변환과
박싱/언박싱 처리가 퍼포먼스에 치명적인 결함을 가져올 수 있습니다.

제네릭 컬렉션을 사용한 다른경우를 보면

System.Collections.Generic.List<int> values = new System.Collections.Generic.List<int>();


values.Add(100);
values.Add(200);

foreach(int val in values)
    Response.Write(val.ToString() + "<br>");

System.collections.Generic 네임스페이스에 있는 List<T> 클래스는
ArrayList 클래스의 제네릭 버젼입니다.

ArrayList 클래스는 모든 형식의 데이터를 object 형식으로 저장하는 반면
List<T> 클래스는 T에 지정된 형식의 데이터를 저장합니다.
T 자리에는 모든 데이터 형식이 지정될 수 있습니다.

List<string> oVar1;
List<DataTime> oVar2;
List<char> oVar3;
List<UserDefinedType> oVar4;   // UserDefineType은 사용자 정의 클래스 이름

위의 소스에서는 List<int> 라고 선언했으므로 형변환이나 박싱/언박싱이
발생되지 않습니다.
또한 만일 values.Add("텍스트") 라는 코드를 추가하면 컴파일 시간에 에러를
발견할수 있습니다.
이렇게 제네릭을 이용하면 모호한 형식에 의해 발생하는 결함들을
근본적으로 제거할 수 있습니다.

제네릭 컬렉션의 클래스들

.NET 1.x 컬렉션  /  .NET 2.0에 추가된 제네릭 컬렉션

ArrayList               /   List<T>

Hashtable             /   Dicrionary<TKey, TValue>

                                SortedDictionary<TKey, TValue>

SortedList             /   SortedList<TKey, TValue>

Queue                  /   Queue<T>

Stack                   /    Stack<T>


이와같이 제네릭 메서드 나 제네릭 클래스를 정의 할수있습니다.
제네릭 메서드 또는 클래스로 코드를 작성하면 컴파일러는
각형식의 메서드 또는 클래스가 정의 된것처럼 컴파일할 겁니다.

void MethodName<T>(T parm)
{
    Response.Write(parm.GetType().ToString();
}

MethodName<int>(10);
MethodName<string>("문자열")

위와 같이 되어있으면 컴파일러는 < 와 > 안에 지정한 형식과 일치하는 두종류의
메서드가 정의된 것처럼 컴파일 합니다.

void MethodName(int parm)
{
    Response.Write(parm.GetType().ToString());
}

void MethodName(string parm)
{
    Response.Write(parm.GetType().ToString());
}

또한 제네릭 메서드는 둘이상의 형식 매개 변수를 정의 할수있습니다.
void MethodName<T1, T2>(T1 parm1, T2 parm2)
{
    ...
}

그리고 제네릭 메서드는 좀더 편한 방법으로 호출할 수 있습니다.
MethodName(10, "문자열");
MethodName( "문자열", DateTime.Now);

이렇게 형식 매개 변수를 생략하고 호출하면, 메서드로 전달된 인자의 형식에 따라
컴파일러가 형식 매개 변수를 추론해서 생성합니다.

Posted by 빨강토끼
,
C# 자습서입니다.
코딩하다 막히는 부분이 있거나 코딩연습을 하고 싶은데 책상에 책을 펴놓고
공부하기에는 눈치가 보이는 직장인들에게 좋은 자습서가 될겁니다.

대부분의 윗분들은 모니터를 보면서 코딩을 하고 있으면 일을 하고있다고
생각할것이기 때문입니다.

http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/csref/html/vcoriCSharpTutorials.asp
Posted by 빨강토끼
,
프로그래밍을 하다보면 함수나 변수의 이름을 정하는 경우
어떤식으로 이름을 지어야될지 혼란스러울때가 있습니다.

파스칼식? 캐멀식?

파스칼식은 이름의 첫번째문자와 그뒤에 이어지는단어들의 첫문자를 대문자로 표시하는방법이고
예) BackColor

캐멀식은 이름의 첫번째문자를 소문자로 하고, 그뒤에 이어지는 단어들의 첫문자를 대문자로  표시하는 방법입니다.
예) backColor

그럼 각각을 어느경우에 쓰느냐...
매개변수를 제외한 거의 대부분의 경우에 파스칼식을 사용합니다.

대소문자 표시스타일
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpgenref/html/cpconcapitalizationstyles.asp

매개변수 명명지침
http://msdn.microsoft.com/library/kor/default.asp?url=/library/KOR/cpgenref/html/cpconParameterNamingGuidelines.asp
Posted by 빨강토끼
,

splash window

프로그래밍/C++ 2007. 4. 26. 17:12
http://www.codeproject.com/miscctrl/csplashscreenex.asp?target=splash

스플래쉬 윈도우는 매인어플이 실행되기전에 잠시 로고등을 보여주는 윈도우를 말합니다.
Posted by 빨강토끼
,

CWND Class

프로그래밍/C++ 2007. 4. 25. 14:52
Posted by 빨강토끼
,

API TIPS

프로그래밍/C++ 2007. 4. 25. 14:51
Posted by 빨강토끼
,

CDC class

프로그래밍/C++ 2007. 4. 25. 11:29
Posted by 빨강토끼
,