'2007/12'에 해당되는 글 7건
- 2007.12.29 익스프레션 스튜디오 관련링크
- 2007.12.27 SetFocus 사용하기 2
- 2007.12.13 CEdit 에서 입력된 글자수 구하는법 2
- 2007.12.11 UpdateData
- 2007.12.07 CreateFont, CreateFontIndirect
- 2007.12.07 SBCS, MBCS, UNICODE
- 2007.12.01 한적한 토요일 오후 2
다이얼로그가 뜨면 자동으로 에디트컨트롤 이라든지 다른 컨트롤에 포커스를
가져가게 하고 싶은데 잘되지 않았습니다.
보통 ::OnInitDialog() 에
m_ctrl_edit.SetFocus() 이런식의 코드를 넣는데
바로 주의 할점은
return 값입니다.
::OnInitDialog() 의 리턴값이
default value 값인 true 로 되어있는데
이렇게 하면 m_ctrl_edit.SetFocus() 먹지않습니다.
return false 라고 하면
SetFocus() 가 됩니다.
가져가게 하고 싶은데 잘되지 않았습니다.
보통 ::OnInitDialog() 에
m_ctrl_edit.SetFocus() 이런식의 코드를 넣는데
바로 주의 할점은
return 값입니다.
::OnInitDialog() 의 리턴값이
default value 값인 true 로 되어있는데
이렇게 하면 m_ctrl_edit.SetFocus() 먹지않습니다.
return false 라고 하면
SetFocus() 가 됩니다.
입력된 글자수에 대하여 반응하는 프로그래밍을 하던중에
영문일땐 한글자를 1바이트로 계산하고
한글일경우엔 2바이트로 계산하기때문에
GetLength() 를 하면 정확한 글자수를 구하기가 힘들었습니다.
이곳저곳을 찾아봐도 해결책을 찾기 힘들었는데
API 함수중에
SendDlgItemMessageW 를 사용하면 해결할수있다는것을 알았습니다.
예를 들어 editbox 가 IDC_EDITTEXT 라면
int Len = SendDlgItemMessageW(m_hWnd,IDC_EDITEDIT,WM_GETTEXTLENGTH,0,NULL);
이라고 하면 정확한 글자갯수가 나옵니다.
영문일땐 한글자를 1바이트로 계산하고
한글일경우엔 2바이트로 계산하기때문에
GetLength() 를 하면 정확한 글자수를 구하기가 힘들었습니다.
이곳저곳을 찾아봐도 해결책을 찾기 힘들었는데
API 함수중에
SendDlgItemMessageW 를 사용하면 해결할수있다는것을 알았습니다.
예를 들어 editbox 가 IDC_EDITTEXT 라면
int Len = SendDlgItemMessageW(m_hWnd,IDC_EDITEDIT,WM_GETTEXTLENGTH,0,NULL);
이라고 하면 정확한 글자갯수가 나옵니다.
UpdateData(TRUE) 는 컨트롤 화면에 가지고 있는 값이 그변수로 들어오게 됩니다.
UpdateData(FALSE) 는 그 변수에 있는 값이 컨트롤의 화면에 나타나게 됩니다.
UpdateData(FALSE) 는 그 변수에 있는 값이 컨트롤의 화면에 나타나게 됩니다.
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 에서 바로 이용할 수 있는 장점도 있습니다.
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 에서 바로 이용할 수 있는 장점도 있습니다.
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)에 대한 정의가 있습니다.
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)에 대한 정의가 있습니다.
토요일에 늦은 아침을 먹고 회사에 나왔습니다.
제가 첫직장을 잡고 이곳을 다닌지 5년이 지났습니다.
그동안 팀도 몇번 뒤집어지고(?) 이런저런 개발일들을 했었지만
주로한것은 웹개발이였습니다.
asp 프로그래밍, ms-sql 관리, ActiveX 개발, DLL 개발,
C개발...
그리고 VB(어플개발),C++(빌링을위한 네트워크통신 DLL),C#(네트워크통신,DB연결)
... 생각해보면 많은것들을 한것 같은데 깊이가 없었습니다.
항상 모든 개발이슈를 혼자서 해결해야했고 힘도 많이 들었습니다.
사장님도 두번이 바뀌었습니다.
누가 좋고 누가 나쁘고를 떠나 다들 사장님(?)으로 모셨던 분들이라
고맘고 좋은기억들뿐이고, 주시는 월급으로 지금껏 살아왔습니다.
최근에 팀을 옮겼습니다.
각종 디바이스에 들어가는 플래시엔진을 개발하는 업무의 팀입니다.
20년이 넘도록 프로그래밍을 하시는 분이 팀장님이시고,
대학에서 박사과정을 마치고 오신 차장님과,
나름 한참 삼성전자의 휴대전화사업과 경쟁을 벌였던 V모회사에서
일하시던 과장님도 계시고, 5년동안 팀을 달라도 서로를 많이 보아오던
과장님과, 개발에 잔뻐가 굵은 대리님, 성격좋고 머리또한 명석하신 또다른 대리님
그리고 정말착실하신 사원님...
한회사를 오래다녀서 밥만 많은 나보다 더 배울것도 많고 동경의 대상의 팀이었습니다.
물론 웹개발이 하찮다는것은 아닙니다.
하지만 ASP.NET 이 나오고 관심만 있을뿐이지 배워보려고 노력을 하지않은
루비나 Ajax 등 많은 패턴들을 놓지고 변변한 나만의 사이트조차 없다는것으로 봐서는
아마 저에겐 웹개발이 웹에이전트나 아웃소싱업체로의 비젼을 바라보지않고서는
관심외 이거나 적성에 맞지 않은듯하였습니다.
다행인지 전에 제가 있던팀은 분위기와 의욕이 좋았습니다.
단합도 잘되었구요. 야근도 강요하지 않고 모두들 즐거운 분위기였습니다.
그런데도 저는 매일 야근을 강요하는 지금의 팀이 부러웠습니다.
100% 개발팀(과장이있긴하지만) 먼가를 배울수있지않을까?
큰차이는 나지않지만 월급도 조금 높았습니다.
개인적 고민(지금팀도 분명 비젼과 장점들이 있으므로)과 이리저리 눈치를 보다가
결국 팀을 옮기게 되었습니다.
머 같은 사업부 아래에 있기때문에 그다지 어색할것 없었습니다.
옮기고 나서....
일주일 내내 야근을 했습니다.
첫째날에는 11시 그다음날부터는 10시에 퇴근을 하였습니다...
문제점을 찾고 무언가를 만들어내야된다는 부담감...
그런데 그전팀에서 업무시간중 틈틈히 나름 여유롭게 웹서핑을 하거나
개인적인 용무를 보고, 야근을 하지 않아도 느끼지 못했던 즐거움이 생기고 있습니다.
출근해서 야근을 하고 집에 돌아오면서 긴장을 놓지못하고 무엇하나라도
자료를 찾고 문제를 해결하려 노력하고 코딩을 하는 저의 모습이 좋아보였습니다.
그래서 토요일 할일도 남아있고 해서 출근을 해서 웹서핑도하고
개인적인 일들도 하니 더 꿀같다는 생각이 들었습니다.
아직은 잘모르겠습니다. 제나이 31살.
어쩜 월급도 큰차이 나지않고 편한(하지만중요한)담당업무에
운영이나 관리쪽으로 경력을 쌓을수도 있는 자리에서
전형적인 3D 팀으로 옮겨서 아침부터 저녁까지 코딩과 씨름해야되는
지금의 저의 선택이 옳을지는 잘모르겠습니다.
제가 첫직장을 잡고 이곳을 다닌지 5년이 지났습니다.
그동안 팀도 몇번 뒤집어지고(?) 이런저런 개발일들을 했었지만
주로한것은 웹개발이였습니다.
asp 프로그래밍, ms-sql 관리, ActiveX 개발, DLL 개발,
C개발...
그리고 VB(어플개발),C++(빌링을위한 네트워크통신 DLL),C#(네트워크통신,DB연결)
... 생각해보면 많은것들을 한것 같은데 깊이가 없었습니다.
항상 모든 개발이슈를 혼자서 해결해야했고 힘도 많이 들었습니다.
사장님도 두번이 바뀌었습니다.
누가 좋고 누가 나쁘고를 떠나 다들 사장님(?)으로 모셨던 분들이라
고맘고 좋은기억들뿐이고, 주시는 월급으로 지금껏 살아왔습니다.
최근에 팀을 옮겼습니다.
각종 디바이스에 들어가는 플래시엔진을 개발하는 업무의 팀입니다.
20년이 넘도록 프로그래밍을 하시는 분이 팀장님이시고,
대학에서 박사과정을 마치고 오신 차장님과,
나름 한참 삼성전자의 휴대전화사업과 경쟁을 벌였던 V모회사에서
일하시던 과장님도 계시고, 5년동안 팀을 달라도 서로를 많이 보아오던
과장님과, 개발에 잔뻐가 굵은 대리님, 성격좋고 머리또한 명석하신 또다른 대리님
그리고 정말착실하신 사원님...
한회사를 오래다녀서 밥만 많은 나보다 더 배울것도 많고 동경의 대상의 팀이었습니다.
물론 웹개발이 하찮다는것은 아닙니다.
하지만 ASP.NET 이 나오고 관심만 있을뿐이지 배워보려고 노력을 하지않은
루비나 Ajax 등 많은 패턴들을 놓지고 변변한 나만의 사이트조차 없다는것으로 봐서는
아마 저에겐 웹개발이 웹에이전트나 아웃소싱업체로의 비젼을 바라보지않고서는
관심외 이거나 적성에 맞지 않은듯하였습니다.
다행인지 전에 제가 있던팀은 분위기와 의욕이 좋았습니다.
단합도 잘되었구요. 야근도 강요하지 않고 모두들 즐거운 분위기였습니다.
그런데도 저는 매일 야근을 강요하는 지금의 팀이 부러웠습니다.
100% 개발팀(과장이있긴하지만) 먼가를 배울수있지않을까?
큰차이는 나지않지만 월급도 조금 높았습니다.
개인적 고민(지금팀도 분명 비젼과 장점들이 있으므로)과 이리저리 눈치를 보다가
결국 팀을 옮기게 되었습니다.
머 같은 사업부 아래에 있기때문에 그다지 어색할것 없었습니다.
옮기고 나서....
일주일 내내 야근을 했습니다.
첫째날에는 11시 그다음날부터는 10시에 퇴근을 하였습니다...
문제점을 찾고 무언가를 만들어내야된다는 부담감...
그런데 그전팀에서 업무시간중 틈틈히 나름 여유롭게 웹서핑을 하거나
개인적인 용무를 보고, 야근을 하지 않아도 느끼지 못했던 즐거움이 생기고 있습니다.
출근해서 야근을 하고 집에 돌아오면서 긴장을 놓지못하고 무엇하나라도
자료를 찾고 문제를 해결하려 노력하고 코딩을 하는 저의 모습이 좋아보였습니다.
그래서 토요일 할일도 남아있고 해서 출근을 해서 웹서핑도하고
개인적인 일들도 하니 더 꿀같다는 생각이 들었습니다.
아직은 잘모르겠습니다. 제나이 31살.
어쩜 월급도 큰차이 나지않고 편한(하지만중요한)담당업무에
운영이나 관리쪽으로 경력을 쌓을수도 있는 자리에서
전형적인 3D 팀으로 옮겨서 아침부터 저녁까지 코딩과 씨름해야되는
지금의 저의 선택이 옳을지는 잘모르겠습니다.




