<ÀÌÅŸ¯Ã¼ ÅØ½ºÆ®¸¦ Ãâ·ÂÇÏ·Á¸é>
Æ®·çŸÀÔÀ̳ª GDI Ãâ·Â ±Û²ÃÀ» ÀÌ¿ëÇϸé ȸÀüÇÑ ÅØ½ºÆ®ÀÇ Ãâ·ÂÀÌ °¡´ÉÇÏ´Ù°í ÇÏ´øµ¥, ¾î¶»°Ô ÇÏ¸é µÇ´ÂÁö¿ä.
¹°·Ð °¡´ÉÇÕ´Ï´Ù. ¾î¶² Çϵå¿þ¾î ÀåÄ¡´Â ȸÀüÇÏ´Â ·¡½ºÅÍ ±Û²ÃÀ» Áö¿øÇϱ⵵
ÇÕ´Ï´Ù.
Çϵå¿þ¾î°¡ Ãß°¡ÀûÀÎ ¹®ÀÚ È¸Àü ±â´ÉÀ» Áö¿øÇÏ´ÂÁö È®ÀÎÇÏ·Á¸é TEXTCAP
ÆÄ¶ó¹ÌÅ͸¦ Àü´ÞÇØ CDC::GetDeviceCaps¸¦ È£ÃâÇÏ¸é µË´Ï´Ù. ´Ü, Æ®·çŸÀÔÀ̳ª GDI
Ãâ·Â ±Û²ÃÀ» »ç¿ëÁßÀ̶ó¸é GetDeviceCaps¸¦ È£ÃâÇÒ Çʿ䰡 ¾ø½À´Ï´Ù.
LOGFONT ±¸Á¶Ã¼ÀÇ ifEscapement ¸â¹ö·Î ÅØ½ºÆ®ÀÇ ±âÁؼ±°ú xÃàÀÇ °¢À» °áÁ¤ÇÒ
¼ö Àִµ¥ À̶§ ÁÖÀÇÇØ¾ß ÇÒ Á¡Àº ½ÇÁ¦ ¼ýÀÚº¸´Ù,Á¤È®È÷ 10¹è¸¦ Å©°Ô ÁöÁ¤ÇØ¾ß ÇÑ´Ù´Â
°ÍÀÔ´Ï´Ù. °¡·É 45µµ¸¸Å ȸÀüÇÑ ±Û²ÃÀ» »ý¼ºÇÏ·Á¸é ifEscapement¸¦ 450À¸·Î ¼³Á¤Çϸé
µË´Ï´Ù.
±×¸®°í ¸ðµç ±Û²ÃÀÌ ÇöÀç ÁÂÇ¥ ü°è¸¦ ±âÁØÀ¸·Î °°Àº ¹æÇâÀ¸·Î ±â¿ïÀÌ·Á¸é
ifClipPrecision ¸â¹öÀÇ CLIP_LH_ANGLES ºñÆ®¸¦ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é
ºÎºÐÀûÀ¸·Î ±Û²ÃÀÌ ¹Ý´ë ¹æÇâÀ¸·Î ȸÀüÇÒ °ÍÀÔ´Ï´Ù.
´ÙÀ½ ÄÚµå´Â 15µµ·Î ±â¿ï¾îÁø ¹®ÀÚ¿À» Ãâ·ÂÇϱâ À§ÇØ 14Æ÷ÀÎÆ®ÀÇ Arial ±Û²ÃÀ»
»ç¿ëÇÑ ¿¹ÀÔ´Ï´Ù.
void CSampleleView::OnDraw(CDC* pDC) {
// âÀÇ Å©±â¸¦ °áÁ¤ÇÑ´Ù.
CRect rcClient;
GetClientRect(rcClient);
// ¹®ÀÚ¿À» »ý¼ºÇÑ´Ù.
CString str(_T("¸¶¼Ò°¡ 14ÁÖ³âÀ» ¸ÂÀÌ ÇÕ´Ï´Ù!"));
//»¡°£»ö ÅØ½ºÆ®¸¦ Ãâ·ÂÇÑ´Ù.
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255, 0, 0));
CFont font; //±Û²Ã °´Ã¼
LONGFONT stFont; //±Û²Ã Á¤ÀÇ
//º¯°æµÇÁö ¾ÊÀ» ±Û²Ã ¼Ó¼ºÀ» ¼³Á¤ÇÑ´Ù.
memset(&stFont, 0, sizeof(LONFONT));
stFont.lfHeight=MulPiv(14, -pDC->GetDeviceCaps(LOGPIXELSY),
72);
stFont.lfWeight=FW_NORMAL;
stFont.lfClipPrecision=CLIP_LH_ANGLES;
strcpy(stFont.lfFaceName, "Arial");
//15 ȸÀüÇÑ ÅØ½ºÆ®¸¦ Ãâ·ÂÇÑ´Ù.
for(int nAngle=0; nAngle<3600; nAngle +=150) {
//»õ·Î¿î °¢À» ÁöÁ¤ÇÑ´Ù.
stFont.lfEscapement=nAngle;
//±Û²ÃÀ» »ý¼ºÇϰí ÀåÄ¡ ÄÁÅØ½ºÆ®·Î ¼±ÅÃÇÑ´Ù.
font.CreatFontIndirect(&stFont);
CFont* pOldFont=pDC->SelectObject(&font);
//ÅØ½ºÆ®¸¦ Ãâ·ÂÇÑ´Ù.
pDC->SelectObject(pOldFont);
font.DeletObject();
<CString ŸÀÔÀÇ SQL ¹®ÀåÀ» ÀÎÀÚ·Î ³Ñ±â·Á¸é>
MFC 5.0À¸·Î ODBC ÇÁ·Î±×·¡¹ÖÀ» ÇÏ¸é¼ SQLExecDirect ÇÔ¼ö¸¦ »ç¿ëÇÏ·Á ÇÕ´Ï´Ù. CString ŸÀÔÀÇ SQL ¹®ÀåÀ» ÀÎÀÚ·Î ³Ñ°ÜÁÖ·Á°í Çϴµ¥ °¡´ÉÇÑÁö¿ä. Á¦°¡ ÀÛ¼ºÇÑ ÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù. ¿©±â¼ strSQLÀº CString ŸÀÔÀ¸·Î ¼±¾ðÇß½À´Ï´Ù.
CStringÀ» SQLExecDirect()ÀÇ ÀÎÀÚ·Î ¹Ù·Î »ç¿ëÇÒ ¼ö´Â ¾ø½À´Ï´Ù. ´ë½Å CStringÀÇ GetBuffer()¸¦ ÀÌ¿ëÇØ Æ÷ÀÎÅ͸¦ ¾ò¾î ¿À¸é µË´Ï´Ù. ¿©±â¼ ÇѰ¡Áö À¯ÀÇÇÒ Á¡Àº GetBuffer()°¡ »õ·Î¿î ¸Þ¸ð¸®¸¦ ÇÒ´ç¹Þ¾Æ ±× Æ÷ÀÎÅ͸¦ ¸®ÅÏÇϹǷΠ»ç¿ëÇÏ°í ³ ÈÄ¿¡´Â ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØÁÖ´Â ReleaseBuffer()¸¦ ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½°ú °°ÀÌ Äڵ带 ¼öÁ¤ÇÏ¸é µË´Ï´Ù.
HSTMT hstmt = NULL;
CString strSQL = "select * from yeebw";
unsigned char* pSQL =
(unsigned char*)strSQL.GetBuffer(strSQL.GetLength()
+ 1);
SQLExecDirect(hstmt, pSQL, SQL_NTS);
strSQL.ReleaseBuffer();
<µð·ºÅ丮 ¼±Åà ´ÙÀ̾ó·Î±× ¶ç¿ì±â>
MFC 5.0À¸·Î ÇÁ·Î±×·¥À» ¸¸µé´ø Áß µð·ºÅ丮 ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ¶ç¿ì´Â ÇÔ¼ö°¡ ÇÊ¿äÇÏ°Ô µÇ¾ú½À´Ï´Ù. ¾î¶² ÇÔ¼ö¸¦ ¾²¸é µÇ´ÂÁö, ±×¸®°í ½ÇÁ¦ÀûÀÎ ¿¹¸¦ º¸°í ½Í½À´Ï´Ù.
µð·ºÅ丮 ¼±Åà ´ÙÀ̾ó·Î±×¸¦ ¶ç¿ì·Á¸é ½Ã½ºÅÛ ÇÔ¼öÀÎ SHBrowseForFolder¸¦ »ç¿ëÇÏ¸é µË´Ï´Ù. ÀÌ ÇÔ¼ö´Â ÀÎÀÚ·Î BROWSEINFO ±¸Á¶Ã¼ Æ÷ÀÎÅ͸¦ ¹ÞÀ¸¸ç, shlobj.h¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵŠÀÖ½À´Ï´Ù.
typedef struct _browseinfo {
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
ÀÌ ±¸Á¶Ã¼¿¡ Àû´çÇÑ °ªÀ» ä¿ö¼ SHBrowseForFolder()¸¦ È£ÃâÇÏ¸é µð·ºÅ丮 ¼±Åà ´ÙÀ̾ó·Î±×°¡ ¶å´Ï´Ù. ¼±ÅÃÇÑ µð·ºÅ丮 ÆÐ½º´Â HGetPathFromIDList()¸¦ È£ÃâÇØ¼ ¾òÀ» ¼ö ÀÖÀ¸¸ç, º¯¼ö tmp¿¡´Â ¼±ÅÃÇÑ µð·ºÅ丮ÀÇ ÆÐ½º°¡ µé¾î ÀÖ½À´Ï´Ù. ´ÙÀ½À» ÂüÁ¶Çϼ¼¿ä.
LPITEMIDLIST pidlBrowse;
LPSTR tmp[MAX_PATH];
BROWSEINFO BRinfo;
BRinfo.hwndOwner = hwnd; // ºÎ¸ð À©µµ¿ìÀÇ ÇÚµé
BRinfo.pidlRoot = NULL;
BRinfo.pszDisplayName = tmp;
BRinfo.lpszTitle = "µð·ºÅ丮¸¦ ¼±ÅÃÇϼ¼¿ä";
BRinfo.ulFlags = BIF_RETURNONLYFSDIRS;
BRinfo.lpfn = NULL;
BRinfo.lParam = 0;
pidlBrowse = SHBrowseForFolder(&BRinfo); // ´ÙÀ̾ó·Î±×¸¦
¶ç¿î´Ù.
if(pidlBrowse != NULL) {
SHGetPathFromIDList(pidlBrowse,
tmp); // ÆÐ½º¸¦ ¾ò¾î¿Â´Ù.
}
MFC·Î âÀÌ È°¼ºÈµÇÁö ¾Ê´õ¶óµµ Ç×»ó À§¿¡ ¶°ÀÖ´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé·Á°í ÇÕ´Ï´Ù.
¸ðµç â À§¿¡ ÃÖ»óÀ§Ã¢(topmost window)À» ¶ç¿ì´Â ¹æ¹ý¿¡´Â µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù.
âÀ» ÀÌ¹Ì »ý¼ºÇß´Ù¸é âÀÇ ½ÇÇà½Ã È®Àå ½ºÅ¸ÀÏ ºñÆ®·Î WS_EX_TOPMOST¸¦ ÁöÁ¤Çϸé
µÇ¸ç, ±×·¸Áö ¾Ê´Ù¸é CWnd::SetWindowPos¸¦ È£ÃâÇÑ ÈÄ µ¥ÀÌÅÍ ¸â¹öÀÎ wndTopMost¸¦
Àü´ÞÇÏ¸é µË´Ï´Ù. ½ºÅ¸ÀÏ ºñÆ®°¡ ¼³Á¤µÅ ÀÖ´ÂÁö È®ÀÎÇÏ·Á¸é CWnd::GetExStyleÀ» ºÒ·¯
°£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Äڵ带 ÂüÁ¶ÇϽʽÿÀ.
void ToggleTopMost(CWnd* pWnd) {
if (pWnd->GetExStyle() & WS_EX_TOPMOST)
pWnd->SetWindowPos(&wndNoTopMost,
0, 0, 0, 0
SWP_NOSIZE
| SWP_NOMOVE);
else
pWnd->SetWindowPos(&wndTopMost,
0, 0, 0, 0
SAWP_NOSIZE
| SWP_NOMOVE);
}
<MDI ÇÁ·Î±×·¥ ½ÃÀ۽à ¶ß´Â µµÅ¥¸ÕÆ® ¾ø¾Ö±â>
MDI ÇÁ·Î±×·¥¿¡¼ óÀ½ ½ÇÇà½Ã ²À µîÀåÇÏ´Â »õ µµÅ¥¸ÕÆ®¸¦ ¶ç¿ìÁö ¾ÊÀ¸·Á¸é ¾î¶»°Ô ÇÏ¸é µÇ³ª¿ä.
ÀÚµ¿À¸·Î ¿¸®´Â ºó À©µµ¿ì¸¦ ¾ø¾Ö´Â ¹æ¹ýÀº ÀǿܷΠ°£´ÜÇÕ´Ï´Ù. Ŭ·¡½º À§Àúµå·Î »ý¼ºÇÑ ¼Ò½ºÁß xxxApp.CPP¶ó´Â ÆÄÀÏ¿¡ CWinApp¿¡¼ »ó¼Ó¹ÞÀº Ŭ·¡½º°¡ µé¾î Àִµ¥, ÀÌ ¸â¹ö ÇÔ¼öÁß InitInstance() ¾È¿¡ ´ÙÀ½ Äڵ尡 Á¸ÀçÇÕ´Ï´Ù.
ParseCommandLine(comInfo);
if( ProcessShellCommand(...))..
ÀÌ µÎ ÁÙ »çÀÌ¿¡ ´ÙÀ½ Äڵ带 Ãß°¡Çϸé ÇÁ·Î±×·¥ÀÌ Ã³À½ ½ÇÇàµÉ ¶§ ½© ¸í·É(ShellCommand) À¸·Î »õ·Î¿î ÆÄÀÏÀ» ¸¸µé¶ó´Â 'FileNew' ¸í·ÉÇàÀÌ ÀÎÀÚ·Î µé¾î¿À°Ô µË´Ï´Ù(µµÅ¥¸ÕÆ®¸¦ ÁöÁ¤ÇÏÁö ¾Ê¾ÒÀ» ¶§). ÀÌ °æ¿ì¿¡¸¸ FileNothingÀ¸·Î ¹Ù²ãÁÖ¸é ºó µµÅ¥¸ÕÆ®¸¦ ¸¸µéÁö ¾ÊÀ¸¸ç ´ç¿¬È÷ ºä/ÇÁ·¹ÀÓµµ º¸ÀÌÁö ¾Ê½À´Ï´Ù.
if(cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew
)
cmdInfo.m_nShellCommand
= CCommandLineInfo::FileNothing;