¶ó. ±Û²Ã ¹Ì¸® »ý¼º

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 ÇÔ¼öµéÀÌ ¿ö³« ¸¹Àº ¿¬»êÀ» Çϱ⠶§¹®¿¡ ±Û²Ã ¹Ì¸® »ý¼º¿¡ ÀÇÇÑ ÃÖÀûÈ­ È¿°ú´Â °ÅÀÇ ¾ø´Â ¼ÀÀÌ´Ù.