검색결과 리스트
분류 전체보기에 해당되는 글 145건
- 2013.09.06 TreeView CommonController 사용시 주의할 점
- 2013.08.14 드디어 1TB 하드디스크를 구매했다.
- 2013.08.01 4만 히트를 자축하며
- 2013.07.31 DDR1/DDR2/DDR3 외형차이
- 2013.07.10 (WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트
- 2013.07.08 (WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR)
- 2013.07.08 TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인
- 2013.07.03 _IO_str_overflow_internal 에러 발생 시
- 2013.06.27 CSS를 하다보면
- 2013.06.27 iconv 에서 다이렉션 기호 사용 시 주의해야할 점
글
TreeView CommonController 사용시 주의할 점
1. TreeView_DeleteItem() 을 사용시, TreeView_DeleteItem(hTree, NULL); 처럼 HTREEITEM 인자에 NULL 값을 주면 전체 노드가 삭제된다. 이게 왜 주의할 점이냐면, TreeView_DeleteItem(hTree,TreeView_GetChild(hTree, Node)); 처럼 사용할 경우, Node의 자식 노드가 존재하지 않을 경우 TreeView_GetChild() 가 NULL을 리턴한다. 즉, 의도하지 않게 전체 노드가 삭제될 수 있다는 이야기다.
삭제를 위한 반복문에서 이 경우를 신경쓰지 않고 코딩을 하면 이런 버그를 만날 수 있다.
물론 이를 방지하기 위해서는 다음과 같이 자식 노드가 존재하는지를 미리 체크해주는 루틴을 넣어주면 된다.
if( NULL != TreeView_GetChild(hTree, Node)) {
TreeView_DeleteItem(hTree, TreeView_GetChild(hTree,Node));
}
2. TreeView_GetItem() 을 사용하여 노드의 텍스트를 가져올 때, cchTextMax도 설정해주어야 한다.
ex)
TVITEM tvi;
char buf[25];
tvi.hItem = Node;
tvi.mask = TVIF_TEXT;
tvi.cchTextmax = 20;
tvi.pszText = buf;
TreeView_GetItem(hTree, &tvi);
3. 어지간하면 TreeView_Expand() 는 맨 마지막에.
TreeView에 데이터를 넣다 보면 여기 저기 갖가지 부모 노드에 자식 노드를 넣어야 하는 경우가 있다. 이럴 경우 노드 처리 작업을 모두 진행한 후에 TreeView_Expand() 를 해줘야지 해당 노드가 제대로 펼쳐진다. 즉, 미리 TreeView_Expand() 명령을 때려놓고 노드 삽입/삭제 작업을 진행하면 Expand가 풀려버리게 된다는 말이다.
'IT/Programming > WinAPI' 카테고리의 다른 글
(WinAPI/MFC) GUI 프로그래밍을 하면서 콘솔을 임의로 띄워 테스트하기 (0) | 2013.10.17 |
---|---|
(WinAPI) editbox 에 줄바꿈 삽입이 안될 때 (0) | 2013.10.16 |
(WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트 (0) | 2013.07.10 |
(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR) (0) | 2013.07.08 |
TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인 (0) | 2013.07.08 |
글
드디어 1TB 하드디스크를 구매했다.
용량에 허덕이다 못해서 온갖 클라우드(네이버, 다음, Dropbox, surdoc) 등을 전전해가며 업로드를 하면서 용량을 비웠었는데, 이번에 드디어 큰맘(?) 먹고 부품 교체용 예산을 조금씩 마련해서 하나 둘씩 사고 있다. 사실 왜 내가 이런 고생을 해왔나 싶을정도로 하드디스크가 하나 생기니깐 너무 편해졌다. 여태까지 불편함을 겪어오면서도 하나 장만하지도 않았던 내가 참으로 어리석다는 생각이 들었다.
데스크탑을 바꾸기 위해서 백업 디스크가 필요하기도 했는데 이걸로 한큐에 해결되었다. 그 외에도 데스크탑에 쓸 모니터, 키보드, 그래픽카드, CPU, RAM, 노트북용 메인보드, RAM, HDD 구입이 예정되어 있는데 천천히 하나씩 사서 갈아끼우면서 희열(?)을 두고두고 만끽해야겠다.
ps. sata - usb 케이블을 이용하여 연결했는데 디스크 관리에 포맷 버튼이 뜨지 않아 한참을 헤맸다. 알고보니 디스크 초기화 마법사를 이용해서 디스크 초기화를 진행하고 포맷을 해야했다. 으이그 멍청..
'My Life > My Works' 카테고리의 다른 글
CSS를 하다보면 (0) | 2013.06.27 |
---|---|
임시저장을 신뢰하지 말자.. (0) | 2010.10.24 |
오랜만에 커널 컴파일 중.. (0) | 2010.10.22 |
글
4만 히트를 자축하며
언제부턴가 네이버에서 사용하던 블로그를 TISTORY 로 옮기고 `이제 제대로 해봐야지!` 하며 시작했던 것이 바로 이 블로그인데, 어느 순간 4만 히트를 넘어섰습니다.
현재 제 블로그에 가장 많이 검색되어 유입되는 키워드는 "이클립스 폰트" 입니다. 언젠가 이클립스에서 한글이 작게 나오는 문제를 해결하기 위해 조금 고생을 했었는데, 그 문제에 대해서 상세히 써놓은 게시글이 제 블로그를 먹여 살리고 있습니다. 그리고 덧글도 10개가 넘게 달릴 정도로 사람들의 호응도 좋은 편이고, 트랙백도 난생 처음 받아봤네요.
언젠가 네이버 지식인을 하면서 느꼈던 것이, 조금이라도 읽는 사람을 배려하여 글을 최대한 잘 쓰는 것이 중요하다고 생각했습니다. 물론 아직 글을 잘 쓰는 편은 아니지만 (오히려 간결히 잘 쓰질 못해 너무 글이 지저분한 경우가 많습니다.) 지식인에서 답변을 달 때 "어떻게 하면 문제를 겪고 있는 글쓴이가 내가 말하는 바를 쉽게 이해하여 문제를 해결할 수 있을까" 를 고민을 많이 했던 것 같습니다.
블로그도 마찬가지로, 최대한 쉽게 쓰려고 노력하였지만 생각보다 그렇지는 못했습니다. 실력이 부족하여 어떤 팁이나 가이드를 함부로 쓰기가 어려웠고 고작해봐야 현실의 문제에 시달려 중단한 연재 포스팅, 남들이 보면 이해하기 힘든 마이너 장르인 분산컴퓨팅 프로젝트, 몇몇 오류 해결방법을 담고 있는 포스팅이 주가 되었습니다. 맨 처음에 생각했던 블로그의 상(像)은 이것이 아닌데, 어쩌다보니 이렇게 되었습니다. 그런데도 꾸준히 방문자 수는 달마다 조금씩 늘어(100명 정도씩 늘었던 것 같습니다.) 일 평균 90명, 월 평균 3000명이 들르는 블로그가 되었습니다.
언제나 해놓고 지켜지지 않는 약속인 `앞으로는 포스팅을 좀 더 열심히 해야겠습니다.` 약속을 또 염치없이 드립니다. 앞으로의 포스팅 계획은 딱히 생각해본 바는 없으나, 저의 일상과 생각을 담은 포스팅이 좀 더 많이 올라올 계획입니다. 그 외에도 중단되었던 몇몇 연재 포스팅도 시간이 허락해준다면 연재해보도록 하겠습니다.
방문 고맙습니다. 아무쪼록 부족한 블로그에서 도움을 얻어갈 수 있다면 그것으로 만족합니다. 오류를 지적해주시거나 고맙다는 인사를 주시거나 다른 의견을 개진해주시는 등 덧글이나 트랙백으로 표하는 약간의 적극적인 관심은 더욱 고맙습니다. 제가 블로그를 시작하면서 새롭게 느낀 바 중 하나가 감사의 덧글이 이토록 큰 힘이 된다는 것이어서, 저도 인터넷 검색을 하며 저에게 도움을 준 블로그에 간간히 덧글을 남기곤 합니다.
구구절절 늘어놓는 말버릇이 또 도지려하니 이만 줄여야겠습니다.
꾸준한 관심에 감사드리고, 더 좋은 블로그로 많은 도움을 드릴 수 있도록 노력하겠습니다. 항상 고맙습니다.
블로그 주인장 드림.
글
DDR1/DDR2/DDR3 외형차이
위 그림은 DDR1/DDR2/DDR3 램카드의 외형차이를 보여주고 있다.
음... 이렇게 달랐구나. -_-; 알아도 정비 일을 하지 않는 이상에는 특별히 도움이 될 일은 없을 것 같다.
'IT/Programming' 카테고리의 다른 글
LocalDB (0) | 2014.01.09 |
---|---|
git 을 웹에서 쉽게 배우자 (0) | 2014.01.09 |
개인적으로 좋아하는 엑셀 함수 사이트 (0) | 2013.03.27 |
Len Sassaman, 세상을 뜨다 (0) | 2011.07.06 |
[FreeBSD] su 사용 권한 부여 (0) | 2010.12.22 |
글
(WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트
사용하기 위해 아래와 같이 선언한다.
#include <shlwapi.h> #pragma comment(lib, "shlwapi")
해당 API에 MSDN 링크가 붙어있으니 클릭하면 더 자세한 정보를 얻을 수 있다.
PathAddBackslash - 경로에 백슬레시를 덧붙여준다. 백슬레시가 이미 붙어 있으면 변경하지 않는다.
"c:\abc\" -> "c:\abc\"
"c:\abc.cpp", ".tmp" -> "c:\abc.cpp"
"c:\abc\", "def" -> "c:\abc\def"
"c:\abc", "\def" -> "c:\abc\def"
"c:\abc\", "\def" -> "c:\abc\def"
1 -> "B:\"
2 -> "C:\"
"c:\abc\def\.\ghi" -> "c:\abc\def\ghi"
"c:\abc\", "..\def\ghi.txt" -> "c:\def\ghi.txt"
"c:\abc\def\jkl.txt", "c:\abc\def\..\jkl.txt" -> "c:\abc\def"
"abc\def.txt" -> "def.txt"
"def.txt" -> ""
"iexplore.exe", { "c:\Windows", "c:\Program Files", "c:\Program Files\Internet Explorer", NULL } -> "c:\Program Files\Internet Explorer\iexplore.exe"
파일이 여러개라면 첫번째로 발견된 파일의 경로만 반환
"c:\abc\def\ghi.txt", { "def.txt", "DEF.txt", ".txt" }, 3 -> ".txt"
"test.exe sample All 15" -> "sample All 15"
"test.exe" -> ""
"abc def ghi" -> "def ghi"
'.' -> GCT_LFNCHAR | GCT_SHORTCHAR
'\\' -> GCT_SEPARATOR
'/' -> GCT_INVALID
'\"' -> GCT_INVALID
'\'' -> GCT_LFNCHAR | GCT_SHORTCHAR
'\t' -> GCT_INVALID
'\n' -> GCT_INVALID
',' -> GCT_LFNCHAR
'*' -> GCT_WILD
'?' -> GCT_WILD
입력된 문자열을 검색하면서 리턴값을 조사하면 올바른 경로인지 미리 검사할 수 있다.
"d:" -> 3
"s:\test" -> 18
".txt", "text/plain" -> TRUE
"txt", "text/plain" -> FALSE
"c:\abc" -> FALSE
"test.txt" -> TRUE
"*-wow." -> TRUE
"test.htm" -> TRUE
"test.xml" -> FALSE
"test.txt" -> FALSE
PathIsLFNFileSpec - 주어진 경로가 긴파일이름에 적합한지 확인한다.
PathIsNetworkPath - 주어진 경로가 네트워크 경로 형식인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"\\abc\def.txt" -> TRUE
"http://abc/def.txt" -> FALSE
"C:\", "c:\abc" -> TRUE
"c:", "c:\abc" -> FALSE
"..\abc", "..\abc\def" -> TRUE
"d:\abc", "d:\def" -> FALSE
"..\abc\def.txt" -> TRUE
"c:\abc\def.txt" -> FALSE
"c:\abc\..\def.txt" -> FALSE
"test.txt" -> TRUE
"c:" -> FALSE
"c:\test.txt" -> FALSE
"c:\program files" -> TRUE
"C:\Documents and Settings" -> FALSE
"C:\Documents and Settings\All Users\Application Data" -> TRUE
PathIsUNC - 네트워크 공유 경로인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"\\abc\def" -> TRUE
"\\192.168.0.1" -> TRUE
"\\abc\def.txt" -> TRUE
"\\" -> TRUE
"\\test.txt" -> TRUE
PathIsUNCServer - 네트워크 공유 서버인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"\\abc\def" -> FALSE
"\\192.168.0.1" -> TRUE
"\\abc\def.txt" -> FALSE
"\\" -> TRUE
"\\test.txt" -> TRUE
PathIsUNCServerShare - 네트워크 공유 폴더인지 확인한다. (실제로 존재하는지 확인하지는 않음)
"\\abc\def" -> TRUE
"\\192.168.0.1" -> FALSE
"\\abc\def.txt" -> TRUE
"\\" -> FALSE
"\\test.txt" -> FALSE
PathIsURL - 주어진 경로가 URL 형식이 맞는지 확인한다.
PathMakePretty - 대문자로 만들어진 경로 문자열을 소문자로 변환한다. (소문자가 하나라도 있으면 실패)
"c:\ABC\DEF" -> FALSE, "c:\ABC\DEF"
"C:\abc\DEF" -> FALSE, "C:\abc\DEF"
"abc.txt", "ab?.*" -> TRUE
"c:\abc\def.txt", "*\???.txt" -> TRUE
c:\abc -> c:\abc
"c:\abc\def\ghi\jkl", FILE_ATTRIBUTE_DIRECTORY, "c:\abc\mno\pqr.txt", 0
"test.exe sample All 15" -> "test.exe"
"test.exe" -> "test.exe"
"abc def ghi" -> "abc"
"c:\abc" -> "c:\abc"
"c:\abc\def\" -> "c:\abc\def"
"c:\abc\def", ".bak" -> "c:\abc\def.bak"
"c:\abc\def\", ".bak" -> "c:\abc\def\.bak"
"C:\foo\baz\.." -> "C:\foo"
"C:\foo\\\baz" -> "C:\foo\baz"
"\\server\aa\..\bb" -> "\\server\aa\bb"
"notepad.exe" -> "C:\Windows\System32\notepad.exe"
"%SystemRoot%\System32\notepad.exe" -> "C:\Windows\System32\notepad.exe"
(XP에서는 환경변수 확장이 제대로 작동하지 않음)
PathSetDlgItemPath - 주어진 다이얼로그 아이템 윈도우의 크기에 알맞게 긴 경로를 적당히 줄여준다.
PathSkipRoot - 루트 경로를 제외한 첫번째 위치를 찾아서 반환한다.
"\\\\abc\\def\\ghi.txt" -> "ghi.txt"
"c:\abc\def" -> "def"
"c:\abc\def\" -> "def\"
"c:\abc\def" -> "c:\"
"C:\Path\File[12]" -> "C:\Path\File"
"C:\Path\File.txt" -> "C:\Path\File.txt"
"C:\Path\[3].txt" -> "C:\Path\[3].txt"
인터넷으로 접근한 임시파일들은 [#]과 같은 식으로 번호가 뒤에 붙는데 그러한 임시 번호를 제거한다.
"c:\program files\test.txt" -> "%ProgramFiles%\test.txt"
"c:\abc\def" -> "%SystemDrive%\abc\def"
'IT/Programming > WinAPI' 카테고리의 다른 글
(WinAPI/MFC) GUI 프로그래밍을 하면서 콘솔을 임의로 띄워 테스트하기 (0) | 2013.10.17 |
---|---|
(WinAPI) editbox 에 줄바꿈 삽입이 안될 때 (0) | 2013.10.16 |
TreeView CommonController 사용시 주의할 점 (0) | 2013.09.06 |
(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR) (0) | 2013.07.08 |
TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인 (0) | 2013.07.08 |
글
(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR)
strcpy -> wcscpy -> _tcscpy (문자열을 복사)
strncpy -> wcsncpy -> _tcsncpy ( 사이즈 만큼 복사)
strlen -> wcslen -> _tcslen (문자열 길이 확인)
strcat -> wcscat -> _tcscat (두 문자열 이어 붙이기)
strncat -> wcsncat -> _tcsncat (사이즈 만큼 이어 붙이기)
strcmp -> wcscmp -> _tcscmp (문자열 비교) (반환 값(-1, 0, 1))
strncmp -> wcsncmp? -> _tcsncmp ( 사이즈 만큼 문자열 비교)
stricmp -> wcsicmp -> _tcsicmp (대소문자를 구별하지 않고 문자열을 비교)
strnicmp -> wcsnicmp -> _tcsnicmp (사이즈 만큼 대소문자를 구별하지 않고 문자열을 비교)
strchr -> wcschr -> _tcschr (문자 찾기)
strrchr -> wcsrchr -> _tcsrchr (문자 찾기 (문자열 끝에서 부터 검색))
strstr -> wcsstr -> _tcsstr (문자열 찾기)
strpbrk -> wcspbrk -> _tcspbrk (문자 찾기 (두번째 인수를 찾고자 하는 문자들의 집합(문자열)으로 구성)
strtok -> wcstok -> _tcstok (문자열 자르기 (두번째 인수를 집합(문자열)으로 구성 가능)) => 해당 문자가 NULL로 치환 됨
strset -> wcsset -> _tcsset (문자 치환, 첫째 인수의 모든 문자를 두번째 인수 문자로 변경함) => "abc" -> "bbb"
strnset -> wcsnset -> _tscnset (사이즈 만큼 문자 치환)
strupr -> wcsupr -> _tcsupr (대문자로 치환)
strlwr -> wcslwr -> _tcslwr (소문자로 치환)
strrev -> wcsrev -> _tcsrev (문자열 역정렬) => "가나다라마" -> "마라다나가"
'IT/Programming > WinAPI' 카테고리의 다른 글
(WinAPI/MFC) GUI 프로그래밍을 하면서 콘솔을 임의로 띄워 테스트하기 (0) | 2013.10.17 |
---|---|
(WinAPI) editbox 에 줄바꿈 삽입이 안될 때 (0) | 2013.10.16 |
TreeView CommonController 사용시 주의할 점 (0) | 2013.09.06 |
(WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트 (0) | 2013.07.10 |
TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인 (0) | 2013.07.08 |
글
TCHAR 문자열을 printf() 할 때 발생하는 문제점의 원인
되게 간단한건데, 왜 이리 자주 까먹는지 모르겠다.. -_-;
윈도우 프로그래밍에 익숙해지지 않아서인것 같다.
UNICODE 문자열 abc가 저장된다고 가정하면 아래와 같이 저장이 된다.
'a'\0 'b'\0 'c'\0 ... (나의 조악한 표현에 묵념을..)
한 바이트마다 NULL 문자가 붙는 것이 특징인데,
printf()가 UNICODE를 지원하지 않아서 당연히 문자 하나밖에 출력이 되지 않는다.
'IT/Programming > WinAPI' 카테고리의 다른 글
(WinAPI/MFC) GUI 프로그래밍을 하면서 콘솔을 임의로 띄워 테스트하기 (0) | 2013.10.17 |
---|---|
(WinAPI) editbox 에 줄바꿈 삽입이 안될 때 (0) | 2013.10.16 |
TreeView CommonController 사용시 주의할 점 (0) | 2013.09.06 |
(WinAPI) 파일/폴더 경로 조작과 관련된 유용한 함수 리스트 (0) | 2013.07.10 |
(WinAPI) 문자열 함수(멀티바이트->유니코드->TCHAR) (0) | 2013.07.08 |
글
_IO_str_overflow_internal 에러 발생 시
리눅스 어플리케이션에서 _IO_str_overflow_internal 에러가 발생할 때, 오버플로우에 문제 해결의 주안을 맞추게 되는데 정작 원인은 동떨어져있을 경우가 있다. 오늘 새벽에 한 4시간 정도 삽질을 한 끝에야 원인을 찾을 수 있었는데, 잘못된 캐스팅으로 인하여 동적 메모리가 제대로 할당되지 않아 dangling pointer가 생성되었고, 해당 공간에 snprintf()를 수행하여 segmentation fault가 발생했던 것이다. 웃기게도 에러 메시지가 overflow 키워드를 담고 있어 완전 고생했다. 아무리 사이즈를 넉넉하게 줘도 오버플로우가 발생하길래 내가 꿈에서 코딩을 하고 있는건지 의심이 될 정도로..
하나씩 메모리 덤프를 까 볼 생각을 왜 못했을까. x/x buf 를 타이핑하고 엔터를 친 순간 탄식을 하지 않을 수 없었다.
아.. ㅠㅠ
'IT/Programming > Solution/Tip' 카테고리의 다른 글
(Linux) script (0) | 2013.11.04 |
---|---|
SQL Server 설치 중 자격증명 오류가 발생할 때 (3) | 2013.09.20 |
iconv 에서 다이렉션 기호 사용 시 주의해야할 점 (0) | 2013.06.27 |
(javascript) getElementById()/getElementsbyName() 함수가 제대로 동작하지 않을 때 (0) | 2013.06.08 |
Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByName' (1) | 2013.06.08 |
글
CSS를 하다보면
요새 일이 있어 웹 페이지를 꾸미는 작업을 하게 되었다.
그런데 문제는 CSS의 기술적인 문제보다는 페이지 자체를 어떻게 꾸며야할지 도저히 감이 오질 않는다. -_-;;
그래서 여기저기 인터넷을 쏘다니면서 대충 모방해볼 만한 페이지들을 찾아보고는 있는데 그래도 참 어렵다.
아무래도 난 정말 디자인과는 동 떨어진 사람인가보다.
'My Life > My Works' 카테고리의 다른 글
드디어 1TB 하드디스크를 구매했다. (0) | 2013.08.14 |
---|---|
임시저장을 신뢰하지 말자.. (0) | 2010.10.24 |
오랜만에 커널 컴파일 중.. (0) | 2010.10.22 |
글
iconv 에서 다이렉션 기호 사용 시 주의해야할 점
iconv 를 사용할 때 다이렉션('>', '>>' 따위의 꺽쇠)기호를 사용할 때, 기존의 파일명에 그대로 출력을 진행하면 해당 파일이 0byte가 되는 문제가 있다. 버그인건지 아니면 내가 무언가 잘못 이해하고 있는지는 잘 모르겠다. 이 문제 때문에 꽤 오랜시간을 고생을 했는데, 아직까지도 무엇이 원인인지는 잘 모르겠다.
iconv [옵션] test.txt > test.txt 이렇게 기존에 있는 파일로 출력했을 때 문제가 발생한다. test_.txt 와 같이 새로운 파일로 출력시켜야한다.
'IT/Programming > Solution/Tip' 카테고리의 다른 글
SQL Server 설치 중 자격증명 오류가 발생할 때 (3) | 2013.09.20 |
---|---|
_IO_str_overflow_internal 에러 발생 시 (0) | 2013.07.03 |
(javascript) getElementById()/getElementsbyName() 함수가 제대로 동작하지 않을 때 (0) | 2013.06.08 |
Uncaught TypeError: Object #<HTMLDocument> has no method 'getElementByName' (1) | 2013.06.08 |
error LNK2019: _DumpRegs@0 외부 기호(참조 위치: _main@0 함수)에서 확인하지 못했습니다. (0) | 2013.05.30 |