CreateFont 와 CreateFontIndirect 는 둘다 폰트를 생성하는 함수입니다.

BOOL CreateFont(
    int nHeight, // 폰트의 높이
    int nWidth,   //폰트의 가로크기
    int nEscapement,    // escapement 벡터각도
    int nOrientation,      // 기준선(보통 수평선) 에서의 각도
    int fnWeight,           // 폰트 가중치
    DWORD fdwItalic,    // 이탤릭 속성 플러그
    DWORD fdwUnderline,   // 밑줄 속성 플러그
    DWORD fdwStrikeOut,   // 중앙선 속성 플러그
    DWORD fdwCharSet,    // 문자열 세트 명칭
    DWORD fdwOutputPrecision,   // 출력 정밀도
    DWORD fdwClipprecision,      // 클리핑 정밀도
    DWORD fdwQuality,               // 출력 문자의 질
    DWORD fdwPitchAndFamily,   // 글꼴 피치의 종류
    LPCSTR lpszFace          // 폰트체의 이름
);

CreateFontIndirect 함수는 LOGFONT 구조체를 설정하여 폰트를 만듭니다.
LOGFONT 구조체는 CreateFont 안의 인자의 값을 그대로 구조체화 한것입니다.

typedef struct tagLOGFONT { //lf
    LONG lfHeight;
    LONG lfWidth;
    LONG lfEscapement;
    LONG lfOrientation;
    LONG lfWeight;
    BYTE lfItalic;
    BYTE lfUnderline;
    BYTE lfStrikeOut;
    BYTE lfCharSet;
    BYTE lfOutPrecision;
    BYTE lfClipPrecision;
    BYTE lfQuality;
    BYTE lfPitchAndFamily;
    TCHAR lfFaceName[LF_FACESIZE];
} LOGFONT;

CreateFont 를 이용할때와 CreateFontIndirect 를 이용할 때는 차이가 있습니다.
CreateFontIndirect 를 이용할때엔 가로 크기와 세로크기를 각각 10으로
설정하였다 하더라도 그 문자의 스타일에 따라 보기 좋은 값으로 약간 변합니다.
즉, CreateFontIndirect 함수를 이용하면 글자체가 좀 보기 좋게 나타납니다.
실지로 폰트를 사용할 때는 CreateFontIndirect 를 많이 사용합니다.
폰트 대화상자에서 특정 폰트를 설정하였을때 LOGFONT가 값을 받으며,
이 값을 CreateFontIndirect 에서 바로 이용할 수 있는 장점도 있습니다.
Posted by 빨강토끼
,
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 빨강토끼
,
토요일에 늦은 아침을 먹고 회사에 나왔습니다.
제가 첫직장을 잡고 이곳을 다닌지 5년이 지났습니다.
그동안 팀도 몇번 뒤집어지고(?) 이런저런 개발일들을 했었지만
주로한것은 웹개발이였습니다.
asp 프로그래밍, ms-sql 관리, ActiveX 개발, DLL 개발,
C개발...
그리고 VB(어플개발),C++(빌링을위한 네트워크통신 DLL),C#(네트워크통신,DB연결)
... 생각해보면 많은것들을 한것 같은데 깊이가 없었습니다.
항상 모든 개발이슈를 혼자서 해결해야했고 힘도 많이 들었습니다.

사장님도 두번이 바뀌었습니다.
누가 좋고 누가 나쁘고를 떠나 다들 사장님(?)으로 모셨던 분들이라
고맘고 좋은기억들뿐이고, 주시는 월급으로 지금껏 살아왔습니다.

최근에 팀을 옮겼습니다.
각종 디바이스에 들어가는 플래시엔진을 개발하는 업무의 팀입니다.
20년이 넘도록 프로그래밍을 하시는 분이 팀장님이시고,
대학에서 박사과정을 마치고 오신 차장님과,
나름 한참 삼성전자의 휴대전화사업과 경쟁을 벌였던 V모회사에서
일하시던 과장님도 계시고, 5년동안 팀을 달라도 서로를 많이 보아오던
과장님과, 개발에 잔뻐가 굵은 대리님, 성격좋고 머리또한 명석하신 또다른 대리님
그리고 정말착실하신 사원님...

한회사를 오래다녀서 밥만 많은 나보다 더 배울것도 많고 동경의 대상의 팀이었습니다.
물론 웹개발이 하찮다는것은 아닙니다.
하지만 ASP.NET 이 나오고 관심만 있을뿐이지 배워보려고 노력을 하지않은
루비나 Ajax 등 많은 패턴들을 놓지고 변변한 나만의 사이트조차 없다는것으로 봐서는
아마 저에겐 웹개발이 웹에이전트나 아웃소싱업체로의 비젼을 바라보지않고서는
관심외 이거나 적성에 맞지 않은듯하였습니다.
다행인지 전에 제가 있던팀은 분위기와 의욕이 좋았습니다.
단합도 잘되었구요. 야근도 강요하지 않고 모두들 즐거운 분위기였습니다.

그런데도 저는 매일 야근을 강요하는 지금의 팀이 부러웠습니다.
100% 개발팀(과장이있긴하지만) 먼가를 배울수있지않을까?
큰차이는 나지않지만 월급도 조금 높았습니다.

개인적 고민(지금팀도 분명 비젼과 장점들이 있으므로)과 이리저리 눈치를 보다가
결국 팀을 옮기게 되었습니다.
머 같은 사업부 아래에 있기때문에 그다지 어색할것 없었습니다.

옮기고 나서....
일주일 내내 야근을 했습니다.
첫째날에는 11시 그다음날부터는 10시에 퇴근을 하였습니다...
문제점을 찾고 무언가를 만들어내야된다는 부담감...
그런데 그전팀에서 업무시간중 틈틈히 나름 여유롭게 웹서핑을 하거나
개인적인 용무를 보고, 야근을 하지 않아도 느끼지 못했던 즐거움이 생기고 있습니다.
출근해서 야근을 하고 집에 돌아오면서 긴장을 놓지못하고 무엇하나라도
자료를 찾고 문제를 해결하려 노력하고 코딩을 하는 저의 모습이 좋아보였습니다.

그래서 토요일 할일도 남아있고 해서 출근을 해서 웹서핑도하고
개인적인 일들도 하니 더 꿀같다는 생각이 들었습니다.
아직은 잘모르겠습니다. 제나이 31살.
어쩜 월급도 큰차이 나지않고 편한(하지만중요한)담당업무에
운영이나 관리쪽으로 경력을 쌓을수도 있는 자리에서
전형적인 3D 팀으로 옮겨서 아침부터 저녁까지 코딩과 씨름해야되는
지금의 저의 선택이 옳을지는 잘모르겠습니다.

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 빨강토끼
,
프로그래머라서 이메일서버에 대하여 전문분야가 아니고
회사에서 사용하는 메일서버또한 별도로 사용하고 있지만
필요에 의하여 메일서버를 셑팅할일이 있어서 이것저것 사용해본 것을 정리해보았습니다.
무료이고 윈도우서버에서 가능한것들입니다.

MailEnable
http://www.mailenable.com/default.asp

현재사용하고 있는 메일서버입니다.
스텐다드 버젼을 무료로 배포하고 있습니다.
상용에서 파생된거라서 장단점은
장점으로는 사용하기 편하다. 최신버젼으로 따끈따끈하다.안정적이다.
단점으로는 고급기능을 지원하지 않는다.(웹메일등)

Macallan mail solution
http://macallan.club.fr/index.htm

맥켈란 이란 이름은 술이름이라고 하네요....
유명한 프로그램같다는 느낌이 듭니다.
이것저것 따로 깔아주면 원하는 만큼의 고급기능들을 사용할수있습니다.
하지만 제가 직접 사용해본적이 없어서....
죄송합니다.

WinWebMail Server
http://www.winwebmail.net/index.html

프로그램명에서 아시다시피 웹메일솔루션입니다.
중국거같던데....

Mercury
http://www.pmail.com/

가장 오랜기간동안 사용한 이메일서버입니다.
역사도 오래됐고 기능도 많지만 단일프로그램으로서 셑업과정이 비교적 간단하지만
(이것저것 옵션으로 깔건별로없다.)
하지만 사용이 번거롭다라는...

NMail 3.7
http://www.passkorea.net/download/List.aspx?cat=2

대표적인 무료이메일서버라고 생각됩니다.
메뉴얼도 같이 다운로드 하셔서 사용하시면 됩니다.
한국서버프로그램이라서 간단하게 사용하기에 편리하고
사이트에서 QnA도 할수있지만 왜 오래동안 사용하지 않았나 저도 기억이 잘안납니다.


FreeSMTP
http://www.softstack.com/scrfreesmtp.html

로컬에서 간단히 메일을 보낼수있는 프로그램입니다.
이메일프로그램에서 보내는 서버를 localhost 로 셑팅하여 사용하실수있습니다.
받는건? 안들듯? 이유는? POP3 에관한게 언급이 안되어있습니다.

IIS에 기본smtp 가 있죠? 같은 역활인듯합니다.
메일을 로컬에서 보내기만하는...
하지만 사용하시는 분에 따라서 유용하게 사용하실수있을겁니다.

외부에서 이서버를 통해 메일을 보낼수있을까요?
(이게 일명 릴레이서버?)
이것도 아마 안될것 같습니다.
혹시 되시는 분은 알려주세요.

--- 첨부 ---

http://kr.blog.yahoo.com/mark_vigor/1264

google 서버를 통하여서도 메일서비스를 사용하실수있습니다.

Posted by 빨강토끼
,

splash window

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

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