원본 : http://www.debuglab.com/knowledge/macro_t.html
1.요약
간단한 매크로를 사용하여 "" 로 묶인 문자열을 _T("") 으로 손쉽게 바꾸어 보자.
2.본문
문자열이 ANSI 와 UNICODE 를 능동적으로 적용하기 위해서는 _T() 매크로를 사용합니다. 물론 컴파일 시간에 _UNICODE 가 define 되어 있느냐의 차이가 위의 매크로에 영향을 미치죠. 하지만, UNICODE 프로그램을 많이 해보지 않은한, 그리고 전에 프로그램을 UNICODE 를 지원하기 위해서 만들지 않았다면, 매번 _T() 를 붙이기란 결코 쉬운작업이 아닙니다. 따라서 첨부한 매크로 파일을 사용하면 쉽게 _T()를 문자열에 붙일 수 있습니다.
첨부한 파일은 ..\Microsoft Visual Studio\Common\MSDev98\Macros 폴더에 넣어서 사용하시기 바랍니다.
3.예제
// 이렇게 되어 있으면 이 라인에 Cursor를 놓고
// 매크로를 실행하시면 됩니다.
char szText[] = "Test Text";
// 짜잔.. char szText[] = _T("Test Test");
* 매크로 소스 - 다운로드
Sub UnderscoreT()
'DESCRIPTION: This macro will automatically put "_T( )" around
' your strings, Author: Orin Walker, 1999, Version 1.1
Dim win
set win = ActiveWindow
if win.type <> "Text" Then
MsgBox "This macro can only be run when a text editor" + _
" window is active."
else
iCount = 0
bFoundAQuote = false
ActiveDocument.Selection.SelectLine
strTemp = ActiveDocument.Selection.Text
strStuffAtEnd = ""
while bDone <> true
str = ParseString(strTemp, bFoundAQuote, strStuffAtEnd)
strBuildString = strBuildString + str
if bFoundAQuote = true then
strTemp = strStuffAtEnd
else
bDone = true
ActiveDocument.Selection.Delete
ActiveDocument.Selection = strBuildString
end if
iCount = iCount + 1
if iCount > 100 then ' safety valve
bDone = true
end if
Wend
end if
End Sub
Function ParseString(strTemp, byRef bFoundAQuote, _
byRef strStuffAtEnd)
'DESCRIPTION: This is a helper function for the UnderscoreT macro,
' Author: Orin Walker, 1999, Version 1.1
' Comment in/out whatever style you prefer
strSpace = "" ' NO space before or after "_T("
'strSpace = " " ' Add a space before and after "_T("
iLen = len(strTemp)
bFoundAQuote = false
' Get the position of the first quote on the line
iPos = instr(strTemp, chr(34))
if iPos > 0 Then 'a quote was found
' Go back and see if we have an existing
' _T( defined for this quote
x = iPos-5 ' Go back up to 5 characters
if x <= 0 then ' If we have reached the
' beginning of our string
x = 1 ' Set x to start at the first character
end if
strCheck = mid(strTemp, x, iPos)
iUnderscoreTPos = instr(strCheck, "_T(")
' If we found one grab everything before the first quote
strBeforeFirstQuote = mid(strTemp, 1, iPos-1)
if iUnderscoreTPos > 0 then ' we found an "_T("
' Do NOT add the "_T(" to our temporary string
strNewTempStr = strBeforeFirstQuote
else
' Now create our new temporary string and append "_T("
strNewTempStr = strBeforeFirstQuote + "_T(" + strSpace
end if
' Get the remaining string
strRemaining = mid(strTemp, iPos+1, iLen)
iLen = len(strRemaining)
' Now find the second quote
iPos = instr(strRemaining, chr(34))
if iPos > 0 Then
' If we found one save the stuff in quotes
strStuffInQuotes = chr(34) + mid(strRemaining,1,iPos)
' And grab the stuff after the quotes
strStuffAtEnd = mid(strRemaining, iPos+1, iLen)
if iUnderscoreTPos > 0 then ' we found an _T(
' Do NOT add the final ")" to our parsed string,
' because it alreasy exists
ParseString = strNewTempStr + strStuffInQuotes
else
' Create our parsed string
ParseString = strNewTempStr + strStuffInQuotes + _
strSpace + ")"
end if
bFoundAQuote = true
else
' No SECOND quote was found so just return
' what was passed in
ParseString = strTemp
End if
else
' No quote was found so just return what was passed in
ParseString = strTemp
end if
End Function
- 2001.08.13 Smile Seo -
"Win32 API" 카테고리의 다른 글
- pair 라는 것의 용도는? (0)2007/03/01
- Alt+F4 키로 종료되는거 막는 방법 (0)2007/03/01
- 문자열을 _T() 형으로 바꿔주는 매크로 (0)2007/03/01
- Ansi 문자열과 Unicode 문자열 바꾸기 (0)2007/03/01
- Console 프로젝트와 Windows 프로젝트 바꾸기 (0)2007/03/01

수안이의 컴퓨터 연구실



Leave your greetings.