<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>시즈모드 - 울산 촌놈 서울 상경기..... =ㅅ=</title>
	<link>http://kalguksu.egloos.com</link>
	<description>눈에 보이는것이 전부다(?)</description>
	<language>ko</language>
	<pubDate>Wed, 02 Jan 2008 07:04:33 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>시즈모드 - 울산 촌놈 서울 상경기..... =ㅅ=</title>
		<url>http://pds4.egloos.com/logo/200701/18/46/e0001746.jpg</url>
		<link>http://kalguksu.egloos.com</link>
		<width>80</width>
		<height>60</height>
		<description>눈에 보이는것이 전부다(?)</description>
	</image>
  	<item>
		<title><![CDATA[ [MFC] TreeControl.. 관련... ]]> </title>
		<link>http://kalguksu.egloos.com/1225657</link>
		<guid>http://kalguksu.egloos.com/1225657</guid>
		<description>
			<![CDATA[ 
  참고...<a href="http://cafe.naver.com/headstudy.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=859"><br><br>http://cafe.naver.com/headstudy.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=859</a><br>			 ]]> 
		</description>
		<category>:: Study MFC</category>

		<comments>http://kalguksu.egloos.com/1225657#comments</comments>
		<pubDate>Wed, 02 Jan 2008 07:04:33 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [SQL] Identity 관련 함수 ]]> </title>
		<link>http://kalguksu.egloos.com/972067</link>
		<guid>http://kalguksu.egloos.com/972067</guid>
		<description>
			<![CDATA[ 
  DBCC CHECKIDENT ('테이블명', RESEED, 값);<br><br>==&gt;&nbsp;ex&gt; DBCC CHECKIDENT ('UserData', RESEED, 0);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&gt;&nbsp;UserData에서 사용중이던 자동증가값(Identity)를 0으로 바꿔서 다시 셋팅하라.<br><br><br>IDENT_CURRENT('테이블명')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 요청하는 테이블의 현재 Identity값<br>==&gt; ex&gt; SELECT @ID = IDENT_CURRENT('UserData')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&gt; UserData에서 사용중인 자동증가값(Identity)를 @ID 에 저장.<br><br><br>@@IDENTITY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- 이 구문을 호출하기전에 Insert한 데이터의 Identity 값. Insert 하지 않았다면 NULL<br>==&gt; ex&gt; SET @ID = @@IDENTITY<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;==&gt; 방금 Insert한 데이터가 가지는 Identity 값을 가져와라.<br>			 ]]> 
		</description>
		<category>:: Study SQL</category>

		<comments>http://kalguksu.egloos.com/972067#comments</comments>
		<pubDate>Thu, 08 Nov 2007 11:13:26 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [VC++] 문자열 제어함수 (펌) ]]> </title>
		<link>http://kalguksu.egloos.com/818395</link>
		<guid>http://kalguksu.egloos.com/818395</guid>
		<description>
			<![CDATA[ 
  <p>문자열 제어 함수</p><p>--------------------------------------------------------------------------------</p><p>대부분의 문자열 제어 함수는 "string.h" 헤더 파일에 그 내용이 정의되어 있다. 따라서 문자열을 제어하려면 &lt;string .h&gt; 헤더 파일 필요.</p><p>#include "iostream.h"<br>#include "string.h"</p><p><br>1. int strlen(문자열)</p><p>문자열의 길이를 반환한다.</p><p>int len=strlen("abc"); <br>cout &lt;&lt; "len=" &lt;&lt; len &lt;&lt; endl; // len=3 </p><p>&nbsp;</p><p>2. char* strcat(문자열1, 문자열2)</p><p>문자열1에 문자열2를 연결한다. 문자열1의 최소 길이는 (문자열1의길이 + 문자열2의 길이 + 1) 이상을 가지고 있어야 하며 만약 그렇지 못하다면 메모리의 내용이 파손된다.</p><p>// 문자열 연결 <br>char str1[20]="abc"; <br>char str2[]="def"; <br>strcat(str1, str2); <br>cout &lt;&lt; str1 &lt;&lt; endl; </p><p>&nbsp;</p><p>3. char* strcpy(문자열1, 문자열2)</p><p>문자열1에 문자열2을 복사한다.</p><p>// 문자열 복사 <br>char str3[20]; <br>char str4[]="park"; <br>strcpy(str3, str4); <br>cout &lt;&lt; str3 &lt;&lt; endl; </p><p>// 문자열 데이터 초기화는 가능하나, 대입문장으로 문자열을 대입할 수 없고 strcpy 함수 사용한다.<br>// name[20]="박원기" : O<br>// irum = name : X</p><p><br>4. int strcmp(문자열1, 문자열2)</p><p>두 개의 문자열을 비교한다.<br>// if(irum=="박원기") : X</p><p>문자열1 &gt; 문자열2 이면 양수, <br>문자열1 == 문자열2 이면 0, <br>문자열1 &lt; 문자열 2 이면 음수를 얻는다. <br>대소문자를 비교하지 않고 문자열을 비교하려면 stricmp(문자열1, 문자열2)함수를 사용한다. <br>정해진 갯수만큼만 비교하려면 strncmp(문자열1, 문자열2, 개수)를 사용한다. </p><p>char str1[]="park"; <br>char str2[]=" wyan gi"; <br>if(strcmp(str1,str2)==0) cout &lt;&lt; "yes, Equal \n"; <br>else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "no, Different \n"; </p><p>&nbsp;</p><p>5. char* strstr(문자열1, 문자열2)</p><p>문자열1에서 문자열2의 문자열이 가장 처음 나타나는 위치를 찾아 포인터를 해당 위치로 이동시키고, 만약 찾지 못했을 경우 null 포인트를 기억시킨다.</p><p>char str3[]="korea"; <br>char str4[]="ea"; <br>char *pstr; <br>pstr=strstr(str3, str4); <br>cout &lt;&lt; pstr &lt;&lt; endl; // 결과 -&gt; ea </p><p>&nbsp;</p><p>6. char* strchr(문자열, 문자)</p><p>문자열에서 문자가 가장 처음 나타나는 위치를 찾아 포인터를 해당 위치로 이동시키고, 만약 찾지 못했을 경우 null 포인트를 기억시킨다.</p><p>문자열을 뒤에서부터 찾으려면 strrchr()함수를 사용한다. <br>char str5[]="korea"; <br>char str6='o'; <br>char *pchr; <br>pchr=strchr(str5, str6); <br>cout &lt;&lt; pchr &lt;&lt; endl; // 결과 -&gt; orea </p><p>// 이메일주소 정규화<br>// strstr(문자열1, 문자열2)<br>// char* strchr(문자열, 문자)</p><p>&nbsp;</p><p>7. char* strlwr(문자열)</p><p>문자열을 소문자로 바꾼다.</p><p>char str1[]="ABC"; <br>char *str2=strlwr(str1); <br>cout &lt;&lt; str2 &lt;&lt; endl; // 결과 -&gt; abc </p><p><br>8. char* strupr(문자열)</p><p>문자열을 대문자로 바꾼다.</p><p>char str1[]="abc"; <br>char *str2=strupr(str1); <br>cout &lt;&lt; str2 &lt;&lt; endl; // 결과 -&gt; ABC </p><p>&nbsp;</p><p>9. char* strncpy(문자열1, 문자열2, 개수)</p><p>문자열2에서 지정한 개수만큼 문자열을 복사하여 문자열1에 복사한다.</p><p>문자열2의 길이 &gt; 개수 이면 문자열1은 널 문자로 끝나지 않기 때문에 널문자를 별도로 삽입해 주어야 한다. (문자열 끝이 널이 아니면 문자열을 처리하는데 비정상적으로 처리될 수 있다) <br>문자열의 길이 &lt; 개수 이면 널문자가 끝에 자동으로 추가된다. <br>char str1[10]; <br>char *str2="abcde"; <br>&nbsp; <br>strncpy(str1, str2, 2); <br>str1[2]='\0'; // 이 부분을 주석처리하면 어떻게 나올까요 ? <br>&nbsp; <br>cout &lt;&lt; str1 &lt;&lt; endl; </p><p>&nbsp;</p><p>10. char* strncat(문자열1, 문자열2, 개수)</p><p>문자열2에서 개수만큼을 복사하여 문자열1뒤에 붙인다.</p><p>char str3[40]="abc"; <br>char str4[]="edfgh"; <br>&nbsp; <br>strncat(str3, str4,3); <br>cout &lt;&lt; str3 &lt;&lt; endl; </p><p>&nbsp;</p><p>11. char* strset(문자열1, 문자1)</p><p>문자열1에 있는 문자를 모두 문자1로 치환한다.</p><p>char str5[]="abcdef"; <br>char str = 'g'; <br>strset(str5, str); <br>cout &lt;&lt; str5 &lt;&lt; endl; </p><p>&nbsp;</p><p>12. char* strnset(문자열1, 문자1, 개수)</p><p>문자열1의 문자를 앞에서 개수만큼을 문자1로 치환한다.</p><p>char str7[]="abcdef"; <br>char str8='g'; <br>strnset(str7,str8,3); <br>cout &lt;&lt; str7 &lt;&lt; endl; </p><p>&nbsp;</p><p>13. char* strrev(문자열1)</p><p>문자열1의 순서를 역순으로 한다.(널문자 제외)</p><p>char str9[]="abcdef"; <br>char *str10=strrev(str9); <br>cout &lt;&lt; str10 &lt;&lt; endl; </p><p>&nbsp;</p><p>14. char* strpbrk(문자열1, 문자열2)</p><p>문자열1에서 문자열2에 있는 문자중 하나라도 찾게된 문자의 위치를 나타낸다.</p><p>char str11[]="abcde"; <br>char str12[]="ce"; <br>char *str13=NULL; <br>str13=strpbrk(str11,str12); <br>cout &lt;&lt; str13 &lt;&lt; endl; // 결과 : cde </p><p>&nbsp;</p><p>15. char* strtok(문자열1, 문자열2)</p><p>문자열1을 문자열2에 포함된 문자들로 분리한다(토큰). 이때 맨 처음 분리된 토큰은 반환되고, 나머지는 strtok함수 내부에 저장된다. 2회째 부터는 문자열1에 NULL을 지정하여 strtok함수를 호출하여 사용한다.</p><p>char str14[]="abc,def,ghi.jkl"; <br>char str15[]=".,"; <br>char *str16=NULL; <br>&nbsp; <br>str16 = strtok(str14,str15); <br>cout &lt;&lt; str16 &lt;&lt; endl; <br>while(str16 !=NULL) <br>{ <br>&nbsp;&nbsp;&nbsp; cout &lt;&lt; str16 &lt;&lt; endl; <br>&nbsp;&nbsp;&nbsp; str16=strtok(NULL,str15); <br>}<br><br>펌) <a href="http://blog.naver.com/ichmoon1">http://blog.naver.com/ichmoon1</a></p>			 ]]> 
		</description>
		<category>:: Study C / C++</category>

		<comments>http://kalguksu.egloos.com/818395#comments</comments>
		<pubDate>Tue, 02 Oct 2007 12:38:57 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC] 프로세스 검색 및 강제 종료 => 변형(검색및 카운팅~) ]]> </title>
		<link>http://kalguksu.egloos.com/814425</link>
		<guid>http://kalguksu.egloos.com/814425</guid>
		<description>
			<![CDATA[ 
  <p>bool&nbsp;CDanceFeverApp::ProcessFind( CString strProcessName, int nFindCount )<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;&nbsp;&nbsp;hProcessSnap&nbsp;= NULL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp;&nbsp;bRet&nbsp;&nbsp;&nbsp;= FALSE;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;PROCESSENTRY32&nbsp;pe32&nbsp;&nbsp;&nbsp;= {0};<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;nCount&nbsp;&nbsp;&nbsp;= 0;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); </p><p>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;if (hProcessSnap == (HANDLE)-1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;</p><p><br>&nbsp;&nbsp;&nbsp;&nbsp;pe32.dwSize = sizeof(PROCESSENTRY32); </p><p>&nbsp;&nbsp;&nbsp;&nbsp;//프로세스가 메모리상에 있으면 첫번째 프로세스를 얻는다<br>&nbsp;&nbsp;&nbsp;&nbsp;if (Process32First(hProcessSnap, &amp;pe32))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bCurrent = FALSE;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODULEENTRY32 me32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = {0};&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bCurrent)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(hProcess)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nCount++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;&nbsp;if(TerminateProcess(hProcess, 0))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long nCode; //프로세스 종료 상태&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetExitCodeProcess(hProcess, &amp;nCode);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */&nbsp;&nbsp;&nbsp;printf("process exit\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hProcess);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (Process32Next(hProcessSnap, &amp;pe32)); //다음 프로세스의 정보를 구하여 있으면 루프를 돈다.<br>&nbsp;&nbsp;&nbsp;&nbsp;} </p><p>&nbsp;if( nCount &gt;= nFindCount )<br>&nbsp;{<br>&nbsp;&nbsp;CloseHandle (hProcessSnap); <br>&nbsp;&nbsp;return true;<br>&nbsp;}<br>&nbsp;else<br>&nbsp;{<br>&nbsp;&nbsp;CloseHandle (hProcessSnap); <br>&nbsp;&nbsp;return false;<br>&nbsp;}<br>}</p><p>&nbsp;</p><p>bool&nbsp;CDanceFeverApp::GetProcessModule(DWORD dwPID,CString sProcessName)<br>{<br>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;nCount = 0;<br>&nbsp;HANDLE&nbsp;&nbsp;&nbsp;hModuleSnap&nbsp;= NULL; <br>&nbsp;MODULEENTRY32&nbsp;me32&nbsp;&nbsp;= {0}; <br>&nbsp;hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID); </p><p>&nbsp;if (hModuleSnap == (HANDLE)-1)<br>&nbsp;{<br>&nbsp;&nbsp;return (FALSE);<br>&nbsp;}</p><p>&nbsp;me32.dwSize = sizeof(MODULEENTRY32);</p><p>&nbsp;//해당 프로세스의 모듈리스트를 루프로 돌려서 프로세스이름과 동일하면 <br>&nbsp;//true를 리턴한다.</p><p>&nbsp;if(Module32First(hModuleSnap, &amp;me32)) <br>&nbsp;{ <br>&nbsp;&nbsp;do <br>&nbsp;&nbsp;{ <br>&nbsp;&nbsp;&nbsp;printf("process name : %s\n", me32.szModule);</p><p>&nbsp;&nbsp;&nbsp;if(me32.szModule == sProcessName)<br>&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle (hModuleSnap); <br>&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;&nbsp;} </p><p>&nbsp;&nbsp;} <br>&nbsp;&nbsp;while(Module32Next(hModuleSnap, &amp;me32)); <br>&nbsp;} </p><p>&nbsp;CloseHandle (hModuleSnap); <br>&nbsp;return false;<br>}</p><p>bool&nbsp;CDanceFeverApp::FindOverlapProcess()<br>{<br>&nbsp;bool bFind = false;</p><p>&nbsp;if( bFind = ProcessFind( _T("DanceFeverC.exe")) )<br>&nbsp;&nbsp;return true;<br>&nbsp;if( bFind = ProcessFind( _T("DanceFeverC_d.exe")) )<br>&nbsp;&nbsp;return true;<br>&nbsp;if( bFind = ProcessFind( _T("Patch.exe")) )<br>&nbsp;&nbsp;return true;<br>&nbsp;if( bFind = ProcessFind( _T("Patch_d.exe")) )<br>&nbsp;&nbsp;return true;<br>&nbsp;if( bFind = ProcessFind( _T("DanceFever.exe"), 2 ) )<br>&nbsp;&nbsp;return true;<br>&nbsp;if( bFind = ProcessFind( _T("DanceFever_d.exe"), 2 ) )<br>&nbsp;&nbsp;return true;</p><p><br>&nbsp;return false;<br>}</p>			 ]]> 
		</description>
		<category>:: Study MFC</category>

		<comments>http://kalguksu.egloos.com/814425#comments</comments>
		<pubDate>Mon, 01 Oct 2007 11:58:31 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC] 프로세스 검색 및 강제 종료 ]]> </title>
		<link>http://kalguksu.egloos.com/814384</link>
		<guid>http://kalguksu.egloos.com/814384</guid>
		<description>
			<![CDATA[ 
  #include "Tlhelp32.h"<br><br>bool ProcessKill(CString strProcessName)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE &nbsp; &nbsp; &nbsp; &nbsp; hProcessSnap = NULL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;BOOL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bRet &nbsp; &nbsp;&nbsp; = FALSE;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;PROCESSENTRY32 pe32 &nbsp; &nbsp;&nbsp; = {0};&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if (hProcessSnap == (HANDLE)-1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;pe32.dwSize = sizeof(PROCESSENTRY32);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;//프로세스가 메모리상에 있으면 첫번째 프로세스를 얻는다<br>&nbsp;&nbsp;&nbsp;&nbsp;if (Process32First(hProcessSnap, &amp;pe32))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BOOL &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; bCurrent = FALSE;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MODULEENTRY32 me32 &nbsp; &nbsp; &nbsp; = {0};&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bCurrent = GetProcessModule(pe32.th32ProcessID,strProcessName);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bCurrent)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(hProcess)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(TerminateProcess(hProcess, 0))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned long nCode; //프로세스 종료 상태&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetExitCodeProcess(hProcess, &amp;nCode);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("process exit\n");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(hProcess);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (Process32Next(hProcessSnap, &amp;pe32)); //다음 프로세스의 정보를 구하여 있으면 루프를 돈다.<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle (hProcessSnap);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>}<br><br><br><br>bool GetProcessModule(DWORD dwPID,CString sProcessName)<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE &nbsp; &nbsp; &nbsp;&nbsp; hModuleSnap = NULL;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;MODULEENTRY32 me32 &nbsp; &nbsp; &nbsp;&nbsp; = {0};&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if (hModuleSnap == (HANDLE)-1)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (FALSE);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;me32.dwSize = sizeof(MODULEENTRY32); <br><br>//해당 프로세스의 모듈리스트를 루프로 돌려서 프로세스이름과 동일하면 <br>//true를 리턴한다.<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if(Module32First(hModuleSnap, &amp;me32))&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("process name : %s\n", me32.szModule);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(me32.szModule == sProcessName)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle (hModuleSnap);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(Module32Next(hModuleSnap, &amp;me32));&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle (hModuleSnap);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>}<br><br><br><br>사용예)<br><br>ProcessKill(_T("iexplore.exe"));<br>			 ]]> 
		</description>
		<category>:: Study MFC</category>

		<comments>http://kalguksu.egloos.com/814384#comments</comments>
		<pubDate>Mon, 01 Oct 2007 11:45:21 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC] 투명한 Dialog 만들기.. ]]> </title>
		<link>http://kalguksu.egloos.com/814351</link>
		<guid>http://kalguksu.egloos.com/814351</guid>
		<description>
			<![CDATA[ 
  <p>typedef BOOL (WINAPI* SetLayer)( HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags );<br>#define&nbsp;LWA_COLORKEY&nbsp;&nbsp;&nbsp;&nbsp;0x01<br>#define&nbsp;LWA_ALPHA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x02<br><br><br>BOOL CTestDlg::OnInitDialog()<br>{<br>&nbsp;&nbsp;&nbsp; CDialog::OnInitDialog();</p><p><br>&nbsp;&nbsp;&nbsp; HMODULE&nbsp;hUser32 = GetModuleHandle( _T("USER32.DLL") );<br>&nbsp;&nbsp; &nbsp;SetLayer pSetLayer = (SetLayer)GetProcAddress( hUser32, "SetLayeredWindowAttributes" );<br>&nbsp;&nbsp; &nbsp;if( pSetLayer == NULL )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return FALSE;</p><p>&nbsp;&nbsp; &nbsp;SetWindowLong( m_hWnd, GWL_EXSTYLE, GetWindowLong( m_hWnd, GWL_EXSTYLE ) | 0x80000 );<br>&nbsp;&nbsp; &nbsp;pSetLayer( m_hWnd, 0, 255, LWA_ALPHA );<br><br>&nbsp;&nbsp;&nbsp; return TRUE;&nbsp; // 컨트롤에 대한 포커스를 설정하지 않을 경우 TRUE를 반환합니다.<br>}<br><br><br>요래~ 요래~ 요래~</p>			 ]]> 
		</description>
		<category>:: Study MFC</category>

		<comments>http://kalguksu.egloos.com/814351#comments</comments>
		<pubDate>Mon, 01 Oct 2007 11:35:27 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [MFC] Dialog 에 Explorer 넣기 - ActiveX (Web Browser) ]]> </title>
		<link>http://kalguksu.egloos.com/609075</link>
		<guid>http://kalguksu.egloos.com/609075</guid>
		<description>
			<![CDATA[ 
  <div>MSDN : WebBrowser Control Overviews and Tutorials 참조</div><div>&nbsp;</div><div>Application에 WebBrowser Control을 포함시키는 것은 매우 간단하다.</div><div>MSDN에 ` Using MFC to Host a WebBrowser Control `에 나와있는데, ...</div><div>&nbsp;</div><div><strong>&gt;</strong> 우선 MFC Dialog Base 프로젝트를 만든다. Active X Controls 가 체크되어있어야한다.</div><div><strong>&gt;</strong> Resource View 에서 Dialog 그림에서 마우스 오른쪽 버튼을 누르고 Insert Active X Control ... 를 선택한다.</div><div><strong>&gt;</strong> Registered Active X Control 중에 ` Microsoft Web Browser&nbsp;` or ` Microsoft 웹 브라우저 ` 를 선택한다. - 까만 바탕에</div><div>마이크로 소프트 Windows 로고의 컨트롤이 보인다.</div><div><strong>&gt;</strong> Ctrl 버튼을 누른 채로 마우스 왼쪽 버튼으로 두 번 클릭하면 Wrapping 클래스 CWebBrowser2를 포함시킬 것인지 묻고</div><div>OK 를 하면되고 다시 Control 변수로 등록할 것인지 묻는다. 적당히 이름주고 멤버 변수로 포함시킨다.<br><br>URL 지정은 다음과 같다.<br><br>실행 할수 있는 아무 곳에나... 일단 InitDialog 가 좋겠징???<br>m_test.Navigate("웹페이지주소", NULL, NULL, NULL, NULL );<div>- 끝.. -<span style="FONT-FAMILY: Courier New"><span style="FONT-SIZE: 85%; COLOR: #3366ff"><div></div></span></span></div></div>			 ]]> 
		</description>
		<category>:: Study MFC</category>

		<comments>http://kalguksu.egloos.com/609075#comments</comments>
		<pubDate>Thu, 30 Aug 2007 06:52:01 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [SQL] ODBC ~~ 우어 ]]> </title>
		<link>http://kalguksu.egloos.com/596218</link>
		<guid>http://kalguksu.egloos.com/596218</guid>
		<description>
			<![CDATA[ 
  &nbsp;<span style="COLOR: #ff0000">ODBC 등록</span>에 대해 알아보겠습니다.<br>'ODBC 등록..? 아.. 뭔지 모르겠지만 또 어려운 건가 보다.. 지겹다.' 라고 생각하시는 분들을 위해<br>ODBC 등록에 대해 되도록 쉽게 말씀 드리겠습니다. ('쉽다면서 맨날 어려워' 라고 하시면 할말이 없네요.. T.T) <span style="COLOR: #ff0000"></span><p><span style="COLOR: #ff0000">ODBC 등록</span>이란 우리가 <span style="COLOR: #ff0000">ASP상에서 사용할 데이터베이스가 어떤 것인지 이름표를 달아주는 작업</span>입니다.<br>수많은 데이터베이스 중에서 우리가 쓸 데이터베이스의 이름과 접속 계정 등을 등록 함으로서 <br>'이 DB는 내가 쓸 것임, 찜했음!'이라고 컴퓨터에게 알려주는 역할을 하는 것이지요.<br>방금 전에 우리는 'test'라는 DB와 'board'라는 테이블을 만들었습니다.<br>이제 이 test라는 DB를 '내가 찜했음'이라고 등록해 보도록 하겠습니다.</p><p>(난 OLEDB를 하고 싶은데.. 하시는 분들이 혹 계실지 모르겠는데요.. 그분들은 이 동네에서 노실 분들이 아닙니다 - OLEDB가 뭔지 알고 있다는 것 자체가 배신입니다, 배신, 배반형!! - <br>그분들은 '게시판 만들기 버전 2000' 동네에서 노시면 훨씬 재밌게 노실 수 있을겁니다. ^.^)</p><p>자, 그럼 ODBC 등록 방법을 알아보도록 하겠습니다.<br>다음 그림과 같이 왼쪽 하단에 있는 '<span style="COLOR: #ff0000">시작 -&gt; 프로그램 -&gt; 관리도구 -&gt; 데이터원본(ODBC)</span>'을클릭하세요 </p><p>&lt;그림 10&gt;<br><img onclick="img_original(1)" height="588" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_10.gif" width="580" onload="img_auto_resize(1)" name="resize_img_1"> </p><p>그러면 아래 그림처럼 창이 하나 뜨게 됩니다. </p><p>&lt;그림 11&gt;<br><img onclick="img_original(2)" height="389" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_11.gif" width="463" onload="img_auto_resize(2)" name="resize_img_2"> </p><p>이곳에서 '<span style="COLOR: #ff0000">System DSN</span>' 탭을 선택하고 '<span style="COLOR: #ff0000">Add</span>' 버튼을 지그시~ 눌러줍니다.<br>그러면 Create New Data Source가 뜨게 되는데 밑의 그림처럼 '<span style="COLOR: #ff0000">SQL Server</span>'를 선택하시면 되겠습니다. </p><p>&lt;그림 12&gt;<br><img onclick="img_original(3)" height="339" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_12.gif" width="514" onload="img_auto_resize(3)" name="resize_img_3"> </p><p>'마침'을 누르시면 아래 그림처럼 Data Source 정보를 입력하는 창이 뜨게 되는데요. </p><p>&lt;그림 13&gt;<br><img onclick="img_original(4)" height="349" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_13.gif" width="514" onload="img_auto_resize(4)" name="resize_img_4"> </p><p>Name에는 이 데이터 소스의 이름을(영어로) 입력하시면 되고요. <br>(이 이름을 잘 기억하셔야 합니다. 나중에 ASP 코드에서 이 이름으로 불러오게 되니까요.)<br>중간에 있는 Description은 생략해도 상관없습니다. <br>Server는 자기 컴퓨터에서 테스트하는 경우 (local)을 선택하신 후 다음을 클릭하시면 되겠습니다.<br>(혹 다른 컴퓨터와 연결해서 쓰시는 경우 그 컴퓨터의 이름을 선택하시면 됩니다) </p><p>그러면 다음 그림처럼 로그인 방법에 대해서 나오게 됩니다.. </p><p>&lt;그림 14&gt;<br><img onclick="img_original(5)" height="349" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_14.gif" width="514" onload="img_auto_resize(5)" name="resize_img_5"> </p><p></p><p>선택(라디오) 버튼이 위 아래로 두개가 나오지요?<br>위의 것은 NT Login ID로 연결하는 것이고, 아래는 SQL Login ID로 연결하는 것입니다.<br>우리는 아래 'SQL Server authentication..' 을 선택하도록 하겠습니다.<br>여기서는 테스트 용이므로 ID는 sa(System Administrator), 비밀번호는 없이 넘어가도록 하겠습니다</p><p><table cellspacing="1" cellpadding="10" bgcolor="#b5bdd6"><tbody><tr><td style="PADDING-RIGHT: 20px; PADDING-LEFT: 20px; PADDING-BOTTOM: 20px; PADDING-TOP: 20px" bgcolor="white"><p>여기서 잠깐!!</p><p>sa는 말 그대로 System Administrator, 즉 모든 권한을 가지고 있는 사람입니다.<br>그러므로 이 계정은 가급적 쓰지 않으시는 것이 좋습니다. 보안상의 문제가 있기 때문이지요.<br>(혹시 누가 이 sa의 암호를 알아서 DB에 접근한다면, 여러분이 공들여 쌓아놓은 많은 자료들이 <br>누군가의 악의적인 행동으로 흔적도 없이 사라질 수 있다는 것입니다. 이것은 절대 복구 불가능입니다..)<br>특히 'ID - sa, password - 없음' 과 같은 기본 세팅은 '날 해킹해줍쇼~~. Please~~' <br>라고 외치는 것과 다를 바가 전혀(!) 없습니다.<br>지금은 테스트라서 기본 세팅을 사용하지만, 절대로~!! 실제에서는 이렇게 사용하지 마세요.<br>계정을 하나 만들어서 사용하시는 것을 추천하며,<br>sa의 암호는 아무도 모를만한 것으로 꼭~ 바꾸시길 추천합니다.</p></td></tr></tbody></table></p><p>자, 흥분을 가라 앉히고 다음 단계로 넘어가도록 하겠습니다.<br>그런데 혹시 다음으로 넘어가지 않고 다음과 같은 그림이 뜨는 분도 있을지 모르겠습니다.</p><p>&lt;그림 14-1&gt; <br><img onclick="img_original(6)" height="138" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_14-1.gif" width="512" onload="img_auto_resize(6)" name="resize_img_6"> &nbsp;</p><p>이 화면은 sa로 로그인을 하려다가 실패했을때 뜨는 경고창인데요.<br>sa의 암호가 틀렸을 경우에 나오는 화면입니다. <br>설치 후 특별히 계정을 건드리지 않았다면 이 화면은 뜨지 않겠지만요.<br>만약 이 화면이 뜬다면 &lt;그림 6&gt;의 왼쪽편에서 '<span style="COLOR: #ff0000">Security</span>' 폴더를 선택하시고&nbsp; '<span style="COLOR: #ff0000">Logins</span>'에서<br>sa의 암호를 바꾸어 주시면 되겠습니다. (암호란을 다 비우고 '확인' 하시면 되겠습니다.)</p><p>다음으로 넘어가셨다면&nbsp;밑의 그림처럼 Change the default database to: 가 있을겁니다. 맨 위에요.</p><p>&lt;그림 15&gt;<br><img onclick="img_original(7)" height="349" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_15.gif" width="514" onload="img_auto_resize(7)" name="resize_img_7"> </p><p>이 단계는 기본 데이터베이스를 지정하는 단계입니다.<br>이것을 우리가 만든 데이터베이스인 test로 바꾸어 주시고 다음을 눌러주세요.<br>그러면 다음 그림이 나오는 화면으로 이동할겁니다.</p><p>&lt;그림 16&gt;<br><img onclick="img_original(8)" height="349" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_16.gif" width="514" onload="img_auto_resize(8)" name="resize_img_8"> </p><p>이부분에서는 별로 건드릴 것이 없습니다. 오랜 기간 고생하셨습니다. 이제 '마침'을 눌러주세요<br>그러면 다음 그림처럼 지금까지 우리가 세팅한 내용이 주욱~~ 나오게 됩니다.</p><p>&lt;그림 17&gt;<br><img onclick="img_original(9)" height="379" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_17.gif" width="368" onload="img_auto_resize(9)" name="resize_img_9"> </p><p>차분하고 경건한 마음으로 아래에 있는 Test Data Source를 지그~시 눌러주세요<br>그러면 다음과 같은 화면이 나오게 됩니다.</p><p><img onclick="img_original(10)" height="379" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_18.gif" width="368" onload="img_auto_resize(10)" name="resize_img_10"> </p><p>"오우, 난 영어가 정말 싫어!!! 무슨 말인지 모르겠다구!!!" 라는 분 계십니까?<br>부디 흥분하지 마시고 설명을 들어주세요. 흥분은 흡연과 마찬가지로 건강에 해롭습니다.<br>위의 그림에서는 단순히 마지막 줄만 보시면 됩니다.</p><p>TESTS COMPLETED SUCCESSFULLY! &lt;--- 중요한건 바로 이겁니다.</p><p>이게 뭐냐고요?? 밑에 OK 버튼을 보니까 무언가 성공한 느낌이 오지 않습니까?<br>그렇습니다. 중학교때 영어 좀 못하면 어떻습니까. 눈치로 다~ 해결할 수 있습니다..<br>테스트에 성공했다.. 즉 지정한대로 데이터베이스에 연결을 시도해 보았더니 잘 되더라~<br>바로 이런 깊은 뜻이 담겨져 있는 것입니다. 기쁘지 않습니까?</p><p>테스트 성공 메시지를 기분좋게 OK로 없애버리신 후, ODBC 화면을 완전히 꺼버리시기 전에 <br>System DSN 탭에서 test가 등록이 되어 있는지 확인해 주십시오. 다음 그림처럼 말입니다. </p><p><img onclick="img_original(11)" height="389" src="http://www.taeyo.pe.kr/lecture/8_Board_taezi/lecture_01/images/taiji_01_19.gif" width="463" onload="img_auto_resize(11)" name="resize_img_11"> </p><p>중간에 test가 등록이 되어 있는 것이 보이시죠? <br>확인을 하셨다면 이제 모든 준비는 완료가 되었습니다. 축하합니다. </p><p>이것으로서 'test'라는 이름의 Database와 'board'라는 이름의 테이블을 만들어 보았고요.<br>또한 ODBC 등록을 통해서 이제 실제로 사용할 수 있도록 모든 준비를 마쳤습니다.</p><p>&nbsp;</p><p>&nbsp;</p><p>======================================================================</p><p>이렇게 준비가 끝나시면요...</p><p>asp작성하실때 이제 odbc를 연결하는 문장만 사용하시면 됩니다.</p><p>간단합니다 ^^연결은.. 아래 taeyo.pe.kr 강의중 ...</p><p>======================================================================</p><p>&nbsp;</p><p>&nbsp;</p><p><span style="COLOR: #ff0000">Set objDBConn = Server.CreateObject("ADODB.Connection")</span> <br><br>&nbsp;이 짧은 한줄에 아주 심오한 의미가 담겨져 있습니다.. ^^<br>&nbsp;ASP에서는 우리가 DB에 접근할 수 있도록 자체적으로 내장된 컴포넌트를 제공해 주는데, 이 DB 관련 <br>&nbsp;컴포넌트를&nbsp;<span style="COLOR: #0000ff">ADO(ActiveX Data Objects)</span> 라고 부릅니다. 그 ADO 라는 컴포넌트 안에는 여러가지 개체가 <br>&nbsp;존재하는데요.&nbsp;그 중에서도 <span style="COLOR: #ff0000">DB와의 연결을 담당하는 개체가 방금 사용한 Connection 개체</span> 가 되겠습니다.<br>&nbsp;사용 방법은 위에서&nbsp;보시는 바와 같이 <span style="COLOR: #0000ff">Server.CreateObject</span> 라는 명령어를 이용해서 <span style="COLOR: #ff0000">objDBConn</span> 이라는 <br>&nbsp;변수에&nbsp;<span style="COLOR: #0000ff">Connection 개체의 인스턴스를 생성</span> 합니다. 그리고 그 녀석(objDBConn)을 사용하게 되는 것이죠.<br><br>&nbsp;조금 어려운 내용일 것입니다. 이부분은 이해가 잘 안가시더라도 그냥 고개를 끄덕이시면서 따라와 주시기를&nbsp;<br>바랍니다. 어차피 이부분은 앞으로 지겹도록 사용해야 하는 부분이고, 사용하다보면 나름대로 정도 들 것이니까요. ^^<br><br>&nbsp;기억해야 하는 것은 이것입니다.<br>&nbsp;DB와 연결하기 위해서 Connection 이라는 개체의 인스턴스를 생성했다. 그것이 바로 objDBConn 이라는 녀석이다..<br><br>&nbsp;'인스턴스가 머야? 인스턴트 식품은 알겠는데.. 인스턴스는 도무지 모르겠단 말이쥐.' 라는 분들께서는 보아 주십시오.<br>&nbsp;예전에 저는 '서유기'를 참 재미있게 보았던 기억이 납니다. TV 에서도 만화로 자주&nbsp;방영해 주었고요.<br>&nbsp;서유기의 주인공인 손오공은 머리카락을&nbsp;하나 뽑은 다음에 훅~ 하고 불면 그 녀석이 손오공으로 되는..<br>&nbsp;아주&nbsp;특별한 재주가 있었습니다. 분명 그 녀석도 손오공이 맞지요. 생김새도, 하는 짓도.. (일종의 분신이죠)<br>&nbsp;인스턴스가 그와 같은 개념입니다. <span style="COLOR: #ff0000">원래의 개체(original)가 있는데 그 개체를 복사해서 그 개체가 하는 모든 기능을&nbsp;자신도 할 수 있게끔 하는 녀석</span>.. 그것이 바로 <span style="COLOR: #0000ff">인스턴스</span> 입니다. 조금은 이해가 되시는지요?<br>&nbsp;<br>&nbsp;그 objDBConn 이라는 인스턴스를 사용하여 실질적으로&nbsp;DB와 연결을 하고,&nbsp;또&nbsp;원하는 내용을 저장할 수 있게 됩니다.<br>&nbsp;그럼 이제 DB와 연결이 이루어지는 38 줄을 보시겠습니다.<br><br>&nbsp;<span style="COLOR: #ff0000">objDBConn.Open "test", "sa", ""</span> <br><br>&nbsp;윗줄에서는 Connection 개체의&nbsp;메소드인 Open 메소드를 사용하는데요. 이 메소드는 인자 세개를 필요로 합니다.<br>&nbsp;<span style="COLOR: #0000ff">첫번째는 DSN(Data Source Name), 두번째는 userID, 세번째는 password</span> 입니다.<br>&nbsp;첫번째 인자인 DSN은 우리가 지난 시간에 만들었던 DB의 이름 "test" 가 되겠습니다.<br>&nbsp;두번째 인자인 userID는 역시 지난 시간에 ODBC 등록시 입력했었던 "sa"(system administrator)가 되고요.<br>&nbsp;세번째 인자인 password는 sa에 대응되었던 비밀번호가 되겠습니다.<br>&nbsp;지난 시간에 sa 의 비밀번호를 바꾸시라고 간곡(?)하게 말씀을 드렸었는데...<br>&nbsp;그때 혹시 비밀번호를 바꾸셨다면 바뀐&nbsp;암호를 여기에 입력하시면 됩니다. (참 착한 분들이세요.. ^^)<br></p><p>&nbsp;</p><p>더 궁금한게 있으시다면 taeyo.pe.kr 가셔서 lecture 메뉴가시면 </p><p>태요님의 강의가 쭉 나옵니다 ^ ^</p><p>&nbsp;</p>			 ]]> 
		</description>
		<category>:: Study SQL</category>

		<comments>http://kalguksu.egloos.com/596218#comments</comments>
		<pubDate>Tue, 28 Aug 2007 05:12:54 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Etc...] [펌]TinyXML 2.... ]]> </title>
		<link>http://kalguksu.egloos.com/595706</link>
		<guid>http://kalguksu.egloos.com/595706</guid>
		<description>
			<![CDATA[ 
  <p>&lt; 초간단 TinyXml 사용 방법 &gt;</p><p>작성자 : 최흥배 ( <a class="con_link" href="mailto:jacking@korea.com" target="_blank"><span style="COLOR: #0000ff">jacking@korea.com</span></a> )<br>문서 최종 수정일 : 2004.10.09<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;--- 예제로 사용 될 xml 문서<br>&lt;?xml version="1.0" encoding="euc-kr"?&gt;<br>&lt;MAJAK&gt;<br>&lt;LOBBY_CONTROL&gt;<br>&nbsp;&lt;Option Index="1125" X="697"&nbsp; Y="3" W="18"&nbsp; H="15"&gt;로비 옵션&lt;/Option&gt;<br>&nbsp;&lt;WindowHide Index="1160" X="732"&nbsp; Y="3" W="18"&nbsp; H="15"&gt;창 숨기기&lt;/WindowHide&gt;<br>&nbsp;&lt;LobbyChange&nbsp; Index="1027" X="32" Y="40" W="116" H="40"&gt;로비나가기&lt;/LobbyChange&gt;<br>&nbsp;&lt;EnterRoom&nbsp; Index="1033" X="152"&nbsp; Y="40" W="116" H="40"&gt;방들어가기&lt;/EnterRoom&gt;<br>&nbsp;&lt;MakeRoom Index="1011" X="276"&nbsp; Y="40" W="116" H="40"&gt;방만들기&lt;/MakeRoom&gt;<br>&nbsp;&lt;RoomInfo Index="1015" X="398" Y="40" W="116" H="40"&gt;관전자정보&lt;/RoomInfo&gt;<br>&nbsp;&lt;RoomList Index="1002" X="28" Y="94" W="507" H="257"&gt;방리스트&lt;/RoomList&gt;<br>&nbsp;&lt;UserList Index="1037" X="568" Y="102" W="216" H="233"&gt;유저리스트&lt;/UserList&gt;<br>&nbsp;&lt;FindText Index="1090" X="603" Y="360" W="87"&nbsp; H="20"&gt;유저찾기 입력&lt;/FindText&gt;<br>&nbsp;&lt;IDFind&nbsp; Index="1091" X="693" Y="360" W="20"&nbsp; H="18"&gt;ID 찾기&lt;/IDFind&gt;<br>&nbsp;&lt;IsWhisper&nbsp; Index="1088" X="717" Y="357" W="12"&nbsp; H="10"&gt;귓속말 설정&lt;/IsWhisper&gt;<br>&nbsp;&lt;IsInvite&nbsp; Index="1089" X="717"&nbsp; Y="373" W="12"&nbsp; H="10"&gt;초대 설정&lt;/IsInvite&gt;<br>&nbsp;&lt;ChatInput Index="1035" X="34" Y="500" W="416" H="18"&gt;채팅 입력&lt;/ChatInput&gt;<br>&nbsp;&lt;Charging Index="1005" X="461" Y="498" W="60"&nbsp; H="20"&gt;신고&lt;/Charging&gt;<br>&nbsp;&lt;Banner Index="2000" X="10" Y="536" W="545" H="44"&gt;배너&lt;/Banner&gt;<br>&nbsp;&lt;QuickStart&nbsp; Index="1084" X="573" Y="550" W="100" H="24"&gt;바로시작&lt;/QuickStart&gt;<br>&nbsp;&lt;FullScreen&nbsp; Index="1172" X="677" Y="550" W="100" H="24"&gt;전체화면&lt;/FullScreen&gt;<br>&nbsp;&lt;Windowed&nbsp; Index="1173" X="677" Y="550" W="100" H="24"&gt;창 화면&lt;/Windowed&gt;<br>&nbsp;&lt;Avata X="577" Y="420" W="56"&nbsp; H="111"&gt;아바타&lt;/Avata&gt;<br>&lt;/LOBBY_CONTROL&gt;</p><p>&nbsp;&lt;ROOM_CONTROL&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7000" X="706" Y="0" File=".\\data\\Gbtn_Capture.spr"&gt;화면 캡쳐&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7001" X="729" Y="2" File=".\\data\\Gbtn_WndMin.spr"&gt;방 숨기기&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7003" X="773" Y="2" File=".\\data\\Gbtn_WndClose.spr"&gt;방 나가기&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7004" X="640" Y="509" File=".\\data\\Gbtn_Entry.spr"&gt;참여&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7005" X="640" Y="509" File=".\\data\\Gbtn_Observe.spr"&gt;관전&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7017" X="682" Y="509" File=".\\data\\Gbtn_ObserveInfo.spr"&gt;관전자정보&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7006" X="745" Y="509" File=".\\data\\Gbtn_Option.spr"&gt;설정&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7007" X="640" Y="539" File=".\\data\\Gbtn_Invite.spr"&gt;초대&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7008" X="689" Y="539" File=".\\data\\Gbtn_112.spr"&gt;신고&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7009" X="738" Y="539" File=".\\data\\Gbtn_Out.spr"&gt;방 나가기&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7010" X="172" Y="578" File=".\\data\\MajakBtn_Bbong.spr"&gt;뽕&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7011" X="213" Y="578" File=".\\data\\MajakBtn_Jji.spr"&gt;찌&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7012" X="254" Y="578" File=".\\data\\MajakBtn_Kkang.spr"&gt;깡&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7013" X="295" Y="578" File=".\\data\\MajakBtn_Rich.spr"&gt;리치&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7014" X="336" Y="578" File=".\\data\\MajakBtn_Cheumo.spr"&gt;츠모&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7015" X="377" Y="578" File=".\\data\\MajakBtn_Rone.spr"&gt;론&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7016" X="418" Y="578" File=".\\data\\MajakBtn_Pass.spr"&gt;패스&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7018" X="266" Y="400" File=".\\data\\Gbtn_Start.spr"&gt;게임시작요청&lt;/GAME_BTN&gt;<br>&nbsp;&nbsp;&lt;GAME_BTN Index="7019" X="190" Y="478" File=".\\data\\MaJakResult_Btn.spr"&gt;결과창의OK&lt;/GAME_BTN&gt;<br>&nbsp;&lt;/ROOM_CONTROL&gt;</p><p>&nbsp;&lt;ROOM_LAYOUT&gt;<br>&nbsp;&nbsp;&lt;USERINFO_POS NUM="0" X="12" Y="32"&gt;왼쪽상단&lt;/USERINFO_POS&gt;<br>&nbsp;&nbsp;&lt;USERINFO_POS NUM="1" X="514" Y="32"&gt;오른쪽상단&lt;/USERINFO_POS&gt;<br>&nbsp;&nbsp;&lt;USERINFO_POS NUM="2" X="563" Y="557"&gt;오른쪽하단&lt;/USERINFO_POS&gt;<br>&nbsp;&nbsp;&lt;USERINFO_POS NUM="3" X="62" Y="562"&gt;왼쪽하단&lt;/USERINFO_POS&gt;<br>&nbsp;&lt;/ROOM_LAYOUT&gt;<br>&lt;/MAJAK&gt;<br>&nbsp;<br>----------<br>&nbsp;<br>&nbsp;<br>1. TinyXml을 사용 할려면<br>&nbsp;- 먼저 TinyXml 라이브러리를 다운 받은 후 빌더를 해야된다. 빌더를 할 때는 이 라이브러리를 사용할 프로젝트가<br>&nbsp;&nbsp; 싱글 쓰레드인지 멀티 쓰레드 인지에 따라서 tinyXml의 쓰레드 옵션을 설정 후 빌드를 해야된다.<br>&nbsp;- 빌드가 끝나면 사용할 프로젝트에서 lib파일을 링크 시킨다.<br>&nbsp;- tinyxml.h, tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp를 프로젝트 폴더에 포함시킨다.<br>&nbsp;- 위 파일 중 tinyxml.h&nbsp; 파일만 소스에서 include 하면 된다.<br>&nbsp;- 사용할 프로젝트가 만약 mfc 프로젝트로 stdafx 파일을 사용한다면 tinyxml.cpp, tinyxmlerror.cpp, tinyxmlparser.cpp<br>&nbsp;&nbsp; 의 상단에 #include "stdafx.h"를 입력해야 된다.<br>&nbsp;- TinyXml을 사용한 후 따로 delete로 지울 필요는 없다( 즉 TiXmlNode* node; 이렇게 사용된 것들..).<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>2. xml 파일 읽기<br>&nbsp;<br>&nbsp;TiXmlDocument doc( "MaJak_Para.xml" );<br>&nbsp;doc.LoadFile();<br>&nbsp;<br>&nbsp;TiXmlDocument m_XmlDoc;<br>&nbsp;if( m_XmlDoc.LoadFile("MaJak_Para.xml" ) == false )<br>&nbsp;&nbsp;return ERR_LOADXML;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>3. 노드의 이동<br>&nbsp;<br>&nbsp;- 루트에서 시작하여 바로 Option 노드로 이동할려면<br>&nbsp;TiXmlNode* node = doc.FirstChild("MAJAK")-&gt;FirstChild("LOBBY_CONTROL")-&gt;FirstChild( "Option" );<br>&nbsp;<br>&nbsp;- 루트에서 LOBBY_CONTROL노드로 이동 할려면<br>&nbsp;node = doc.FirstChild();<br>&nbsp;node = node-&gt;NextSibling();</p><p>&nbsp;int Pos = 1<br>&nbsp;for( i = 0; i &lt; Pos; ++i )<br>&nbsp;{<br>&nbsp;&nbsp;node = node-&gt;FirstChild();<br>&nbsp;}<br>&nbsp;&nbsp;&nbsp; 여기에서 Pos를 2로 하면 LOBBY_CONTROL노드의 첫번째 자식까지 이동 한다.<br>&nbsp;<br>&nbsp;- LOBBY_CONTROL 노드에 있는 상태에서 이 노드의 자식 중 LobbyExit 노드로 바로 갈려면<br>&nbsp;node = node-&gt;FirstChild( "LobbyExit" );<br>&nbsp;<br>&nbsp;- 노드의 값을 볼려면 node-&gt;Value()로 하면 문자가 나온다.<br>&nbsp;<br>&nbsp;- 도큐먼트의 top 레벨의 기준으로 해서 자식 노드로 이동 할려면<br>&nbsp;count = 0;<br>&nbsp;for( node = doc.FirstChild();node;node = node-&gt;NextSibling())<br>&nbsp;{<br>&nbsp;&nbsp;count++;<br>&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;// 아래서 위로 이동할려면<br>&nbsp;count = 0;<br>&nbsp;for( node = doc.LastChild();node;node = node-&gt;PreviousSibling() )<br>&nbsp;{<br>&nbsp;&nbsp;count++;<br>&nbsp;}<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; // 이터레이터를 사용<br>&nbsp;count = 0;<br>&nbsp;for( node = doc.IterateChildren(0);node;node = doc.IterateChildren(node) )<br>&nbsp;{<br>&nbsp;&nbsp;count++;<br>&nbsp;}<br>&nbsp;&nbsp; <br>&nbsp;// 자식 노드 중 원하는 노드만으로의 이동도 가능하다.<br>&nbsp;</p><p><br>4. 노드의 애트리뷰트 값을 얻기<br>&nbsp;<br>- 현재 노드에서 모든 자식노드의 애트리뷰트 값을 얻을려면 다음과 같이 한다.<br>&nbsp;node = node-&gt;FirstChild();<br>&nbsp;CONTROL_RECT ControlRect;<br>&nbsp;TiXmlElement* elem;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;while( node != NULL )<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elem = node-&gt;ToElement();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;elem-&gt;Attribute( "Index", &amp;ControlRect.index )<br>&nbsp;&nbsp;elem-&gt;Attribute( "X", &amp;ControlRect.x );<br>&nbsp;&nbsp;elem-&gt;Attribute( "Y", &amp;ControlRect.y );<br>&nbsp;&nbsp;elem-&gt;Attribute( "W", &amp;ControlRect.w );<br>&nbsp;&nbsp;elem-&gt;Attribute( "H", &amp;ControlRect.h );</p><p>&nbsp;&nbsp;node = node-&gt;NextSibling();<br>&nbsp;}<br>&nbsp;<br>&nbsp;Attribute 의&nbsp; 리턴 값으로 애트리뷰트 값의 문자형을 얻을 수 있다.<br>&nbsp;<br>&nbsp;- 애트리뷰트 이동 방법<br>&nbsp;<br>&nbsp;// 노드의 첫 애트리뷰트에서 마지막 애트리뷰트까지 이동 <br>&nbsp;count = 0;<br>&nbsp;for( element = todoElement-&gt;FirstChildElement();element;element = element-&gt;NextSiblingElement() )<br>&nbsp;{<br>&nbsp;&nbsp;count++;<br>&nbsp;}<br>&nbsp; </p><p>5. 애트리뷰트를 얻을 수 있도록 노드 대신 element를 얻는 방법</p><p>&nbsp;node = node-&gt;FirstChild();<br>&nbsp;TiXmlElement* Rootelem = node-&gt;NextSiblingElement( _strNodeName );<br>&nbsp;TiXmlElement* elem = Rootelem-&gt;FirstChildElement( _strSubNodeName );<br>&nbsp;elem-&gt;Attribute( "Index", &amp;iIndex );<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>6. 애트리뷰트의 첫버째 속성과 다음 속성을 얻는 방법<br>&nbsp;<br>&nbsp;TiXmlAttribute* Attribut;<br>&nbsp;Attribut = elem-&gt;FirstAttribute()</p><p>&nbsp;// 정수 및 스트링을 얻을 수 있다.<br>&nbsp;Attribut-&gt;IntValue();&nbsp;&nbsp;&nbsp; <br>&nbsp;Attribut-&gt;Value();</p><p>&nbsp;// 다음 애트리뷰트 값을 얻을렴ㄴ<br>&nbsp;Attribut = Attribut-&gt;Next();</p>			 ]]> 
		</description>
		<category>:: Study Etc...</category>

		<comments>http://kalguksu.egloos.com/595706#comments</comments>
		<pubDate>Tue, 28 Aug 2007 03:01:33 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
	<item>
		<title><![CDATA[ [Etc...] [펌]TinyXML 1.... ]]> </title>
		<link>http://kalguksu.egloos.com/595704</link>
		<guid>http://kalguksu.egloos.com/595704</guid>
		<description>
			<![CDATA[ 
  <p>일단.. 헤더..<br><br><span style="COLOR: #333333">#include "tinyxml/tinystr.h"<br>#include "tinyxml/tinyxml.h"</span><br><br>두개다 꼭넣어야하는진모르겠고..일단넣고..;;<br><br>xml파일을 로딩합니다...<br><br><span style="COLOR: #333333">TiXmlDocument xml(filename);<br>xml.LoadFile();<br><br>if(xml.Error() == true)<br>&nbsp; &nbsp; return false;<br></span><br><br>로딩이되었으면 읽어봐야죠..<br>첫번째 루트를 읽어오겠습니다.<br><br><span style="COLOR: #333333">TiXmlElement * root = xml.FirstChildElement("Root");<br><br>하게되면<br></span><span style="COLOR: #0000ff">&lt;Root&gt;<br>&nbsp;&nbsp; ...<br>&nbsp;&nbsp; ...<br>&lt;/Root&gt;<br></span>이름을 검색해 맨처음나오는 노드를 얻어오게됩니다..<br>이런식으로 노드를 얻고<br>속성값은<br><br><span style="COLOR: #333333">string str = node-&gt;Attribute("속성명", &amp;값);</span><br>하시면.. 값을 얻어옵니다.<br>스트링은 그냥 리턴값을 얻으면됩니다.<br><br>노드를 순회하는건 단순히 for문을 돌면되더랍니다..<br><span style="COLOR: #333333">for(;node;node = node-&gt;NextSiblingElement())<br>{<br>&nbsp; &nbsp; //처리<br>}</span><br>이런식으로 노드부터끝까지 순회합니다.<br>저는 GUI툴이었기때문에 상속관계가있어서..<br>재귀호출해놓았습니다.</p>			 ]]> 
		</description>
		<category>:: Study Etc...</category>

		<comments>http://kalguksu.egloos.com/595704#comments</comments>
		<pubDate>Tue, 28 Aug 2007 03:00:46 GMT</pubDate>
		<dc:creator>시즈모드</dc:creator>
	</item>
</channel>
</rss>
