CApiEdit::OnPaint ÇÔ¼öÀÇ ±×¸®±â ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºµÇ¾î ÀÖ´Ù.
void CApiEdit::OnPaint(HWND hWnd)
{
....
if (logfont.lfHeight != 0) {
hFont=CreateFontIndirect(&logfont);
hOldFont=(HFONT)SelectObject(hMemDC,hFont);
}
==== ±×¸®±â ÄÚµå ====
if (logfont.lfHeight != 0) {
DeleteObject(SelectObject(hMemDC,hOldFont));
}
ÇöÀç ¼±ÅÃµÈ ±Û²ÃÀÌ ½Ã½ºÅÛ ±Û²ÃÀÌ ¾Æ´Ï¸é ±Û²ÃÀ» »ý¼ºÇÏ¿© DC¿¡ ¼±ÅÃÇسõ°í ±×¸®±â ÀÛ¾÷À» ÇÑ´Ù. ÀÛ¾÷ÀÌ ¸ðµÎ ¿Ï·áµÇ¸é ±Û²ÃÀ» ¼±ÅÃÇØÁ¦ÇÏ°í Æı«Çϴµ¥ ÀÌ·¸°Ô ÇÏ´Ù º¸´Ï OnPaint ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¶§¸¶´Ù ±Û²ÃÀ» ¸¸µé¾ú´Ù Æı«Çß´Ù¸¦ ¹Ýº¹ÇÏ°í ÀÖ´Â ¼ÀÀÌ´Ù. ±Û²ÃÀº ÀÚÁÖ º¯ÇÏ´Â °Íµµ ¾Æ´Ï¹Ç·Î SetFont¿¡¼ ¹Ì¸® ¸¸µé¾î ³õ¾Æ ±×¸®±â ¼Óµµ¸¦ ³ô¿© º¸µµ·Ï ÇÏÀÚ. ÆùÆ® ÇÚµéÀ» ±â¾ïÇÒ ¸â¹ö¸¦ Ãß°¡ÇÏ°í SetDefaultSetting¿¡¼ NULL·Î ÃʱâÈÇÑ´Ù.
class CApiEdit
{
....
HFONT hMainFont;
void CApiEdit::SetDefaultSetting()
{
....
logfont.lfHeight=0;
hMainFont=NULL;
....
SetFont¿¡¼ ±Û²ÃÀÌ º¯°æµÉ ¶§ ±Û²ÃÀ» Á÷Á¢ »ý¼ºÇÑ´Ù.
void CApiEdit::SetFont(LOGFONT *alogfont)
{
HDC hdc;
TEXTMETRIC tm;
HFONT hOldFont=NULL;
if (hMainFont) {
DeleteObject(hMainFont);
hMainFont=NULL;
}
logfont=*alogfont;
hdc=GetDC(hWnd);
if (logfont.lfHeight != 0) {
hMainFont=CreateFontIndirect(&logfont);
hOldFont=(HFONT)SelectObject(hdc,hMainFont);
}
PrepareCharWidth(hdc);
GetTextMetrics(hdc,&tm);
FontHeight=tm.tmHeight;
LineHeight=int(FontHeight*LineRatio/100);
yPos=yPos-(yPos % LineHeight);
FontWidth=tm.tmAveCharWidth;
if (bCalcTabWithAvg) {
TabSize=FontWidth*TabWidth;
} else {
TabSize=arChWidth[¡® ¡®]*TabWidth;
}
if (hOldFont) {
SelectObject(hdc,hOldFont);
}
ReleaseDC(hWnd,hdc);
....
Áö¿ª º¯¼ö hFont´Â ´õ ÀÌ»ó ÇÊ¿ä°¡ ¾øÀ¸¸ç ½Ã½ºÅÛ ±Û²ÃÀÌ ¾Æ´Ï¸é hMainFont¿¡ »ý¼ºÇÑ ±Û²ÃÀ» Á÷Á¢ ´ëÀÔÇÏ¿´´Ù. ±×Àü¿¡ ÀÌ¹Ì »ý¼ºµÇ¾î ÀÖ´Â ±Û²ÃÀÌ ÀÖ´Ù¸é ÀÌ ±Û²ÃÀº Æı«ÇØ¾ß ÇÑ´Ù. ±Û²Ã·ÎºÎÅÍ ¿øÇÏ´Â Á¤º¸¸¦ ¾ò°í ³ ÈÄ¿¡µµ ÀÌ ±Û²ÃÀ» Æı«ÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ÀÌÈÄ OnPaint¿¡¼´Â hMainFont¸¦ ¹Ù·Î ¼±ÅÃÇؼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. OnPaint´Â ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
void CApiEdit::OnPaint(HWND hWnd)
{
....
HFONT hOldFont;
....
if (hMainFont) {
hOldFont=(HFONT)SelectObject(hMemDC,hMainFont);
}
....
if (hMainFont) {
SelectObject(hMemDC,hOldFont);
}
DeleteObject(hBrush);
SelectObject(hMemDC,OldBitmap);
DeleteDC(hMemDC);
EndPaint(hWnd,&ps);
}
hMainFont°¡ NULLÀÌ ¾Æ´Ï¸é, Áï ½Ã½ºÅÛ ±Û²ÃÀÌ ¾Æ´Ï¸é ÀÌ ±Û²ÃÀ» ÇöÀç DC¿¡ ¼±ÅÃÇÑ ÈÄ ±×¸®±â¸¦ ÇÑ´Ù. ±×¸®±â¸¦ ¿Ï·áÇÑ ÈÄ¿¡µµ ±Û²ÃÀ» Æı«ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÀÌ·¸°Ô »ç¿ëÇÑ ±Û²ÃÀº OnDestroy¿¡¼ Á¾·á Á÷Àü¿¡ Æı«ÇÏ¸é µÈ´Ù.
void CApiEdit::OnDestroy(HWND hWnd)
{
....
if (hMainFont) {
DeleteObject(hMainFont);
}
}
ÀÌÁ¦ ±×¸®±â¸¦ ÇÒ ¶§¸¶´Ù ±Û²ÃÀ» ¸¸µé¾ú´Ù Æı«Çß´Ù ÇÏÁö ¾ÊÀ¸¹Ç·Î ±×¸®±â ¼Óµµ°¡ Á¶±Ý »¡¶óÁú °ÍÀÌ´Ù. ±Û²ÃÀ» »ý¼ºÇÏ´Â ÀÛ¾÷Àº ½Ã°£ÀÌ ¿À·¡ °É¸®±â ¶§¹®¿¡ ÃÖÀûÈ È¿°ú°¡ »ó´çÇÒ °ÍÀ¸·Î ±â´ëÇßÀ¸³ª Á¤¹ÐÇÏ°Ô ÃøÁ¤Çغ¸¸é 1/1000ÃÊ ¹Ì¸¸ÀÇ Â÷À̹ۿ¡ ³ªÁö ¾Ê¾Ò´Ù. DrawLine, DrawSegment ÇÔ¼öµéÀÌ ¿ö³« ¸¹Àº ¿¬»êÀ» Çϱ⠶§¹®¿¡ ±Û²Ã ¹Ì¸® »ý¼º¿¡ ÀÇÇÑ ÃÖÀûÈ È¿°ú´Â °ÅÀÇ ¾ø´Â ¼ÀÀÌ´Ù.