<½ºÇø®ÅÍ À©µµ¿ìÀÇ Å©±â¸¦ °íÁ¤ÇÏ·Á¸é>

MFC Ŭ·¡½º À§Àúµå·Î ½ºÅÂƽ ½ºÇø®ÅÍ(Static splitter) À©µµ¿ì¸¦ ÀÌ¿ëÇØ ÇϳªÀÇ ÇÁ·¹ÀÓ¿¡ µÎ °³ÀÇ ºä¸¦ °®°í ÀÖ´Â ¿¹Á¦¸¦ ÀÛ¼ºÇß½À´Ï´Ù. ½ºÇø®ÅÍ À©µµ¿ì¿¡¼­ Å©±â º¯°æÀÌ ºÒ°¡´ÉÇϵµ·Ï ¸¸µé·Á¸é ¾î¶»°Ô ÇØ¾ß Çϳª¿ä.

½ºÇø®ÅÍ À©µµ¿ì¿¡¼­ Å©±â º¯°æÀÌ ¾ÈµÇµµ·Ï ÇÏ·Á¸é ¿ì¼± ½ºÇø´¹ÙÀÇ Çൿ ¾ç½Ä¿¡¼­ ±× ¹æ¹ýÀ» ãÀ» ¼ö ÀÖ½À´Ï´Ù. ½ºÇø´¹Ù´Â WM_MOUSEMOVE, WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK ¸Þ½ÃÁö°¡ ³Ñ¾î ¿Ã ¶§ Å©±â¸¦ Á¶Á¤Çϵµ·Ï ¼³°èµÅ ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î ¸¶¿ì½º°¡ ½ºÇø´¹Ù À§¿¡ ¿À¸é ¸¶¿ì½º Ä¿¼­°¡ º¯ÇÏ°Ô µÇ°í ½ºÇø´¹Ù À§¿¡¼­ ¸¶¿ì½º¸¦ ´©¸£¸é ±×¶§ºÎÅÍ Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±×¸®°í ´­·¶´ø ¸¶¿ì½º¸¦ ³õÀ¸¸é Å©±â º¯°æÀ» ¿Ï·áµÇ´Â °ÅÁÒ. µû¶ó¼­ ÀÌ ³× °¡Áö ¸Þ½ÃÁö°¡ ³Ñ¾î¿Ã ¶§ ¾Æ¹« Àϵµ ÇÏÁö ¾Êµµ·Ï ÇÏ¸é µË´Ï´Ù. Áï, ¸Þ½ÃÁö Çڵ鷯¸¦ ¾Æ¹« Àϵµ ÇÏÁö ¾Êµµ·Ï ÀÛ¼ºÇØ ÁÖ¸é óÀ½ Á¤ÇØÁø Å©±â·Î °íÁ¤µË´Ï´Ù. ¸¶¿ì½º°¡ ½ºÇø´¹Ù À§·Î °¡µµ Ä¿¼­°¡ º¯ÇÏÁö ¾Ê´Â °ÍÀº ¹°·ÐÀÌ°í ½ºÇø´¹Ù À§¸¦ Ŭ¸¯Çصµ Å©±â°¡ Á¶Á¤µÇÁö ¾Ê½À´Ï´Ù. ´ÙÀ½ Äڵ带 Âü°íÇϼ¼¿ä.

  Çì´õ ÆÄÀÏ
class CFixedSplitterWnd : public CSplitterWnd {
//. . .
protected:
    //{{AFX_MSG(CFixedSplitterWnd)
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
   //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

  ¼Ò½º ÆÄÀÏ
//. . .
BEGIN_MESSAGE_MAP(CFixedSplitterWnd, CSplitterWnd)
    //{{AFX_MSG_MAP(CFixedSplitterWnd)
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
    ON_WM_LBUTTONDBLCLK()
   //}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
//CFixedSplitterWnd message handlers
void CFixedSplitterWnd::OnMouseMove(UINT nFlags, CPoint point) {
    // TODO:
    // ±âº»ÀûÀ¸·Î Á¤ÀÇµÈ ÇÔ¼ö´Â CSplitterWnd::OnMOuseMove(nFlag, point)ÀÌ´Ù.
    CWnd::OnMouseMove(nFlags, point); // ¾Æ¹« Àϵµ ÇÏÁö ¾Ê´Â´Ù.
}

void CFixedSplitterWnd::OnLButtonDown(UINT nFlags, CPoint point) {
    // TODO:
    CWnd::OnLButtonDown(nFlags, point);
}

void CFixedSplitterWnd::OnLButtonUp(UINT nFlags, CPoint point) {
    // TODO:
    CWnd::OnLButtonUp(nFlags, point);
}

void CFixedSplitterWnd::OnLButtonDblClk(UINT nFlags, CPoint point) {
    // TODO:
    CWnd::OnLButtonDblClk(nFlags, point);
}

 

<´ÙÀ̾ó·Î±× ÆùÆ®¸¦ º¯°æÇÏ·Á¸é>

´ÙÀ̾ó·Î±×¿¡ Æ÷ÇԵŠÀÖ´Â ÄÁÆ®·ÑÀÇ ÆùÆ®¸¦ »ç¿ëÀÚ Á¤ÀÇ ÆùÆ®·Î ¹Ù²Ù°í ½Í½À´Ï´Ù.

´ÙÀ̾ó·Î±×¿¡ Æ÷ÇԵǴ ÄÁÆ®·ÑÀº ±âº»ÀûÀ¸·Î ´ÙÀ̾ó·Î±×ÀÇ ÆùÆ®¸¦ ±×´ë·Î ¾²°Ô µË´Ï´Ù. CFont °´Ã¼¸¦ ÀÌ¿ëÇØ ÆùÆ®¸¦ »ý¼ºÇÑ ÈÄ ÄÁÆ®·ÑÀÇ SetFont()¸¦ È£ÃâÇÏ¸é ½±°Ô ÄÁÆ®·ÑÀÇ ÆùÆ®¸¦ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ µ¿ÀÛÀ» ÃëÇϱ⠰¡Àå ÁÁÀº ºÎºÐÀÌ ´ÙÀ̾ó·Î±×ÀÇ OnInitDialog()ÀÔ´Ï´Ù. ´ÙÀ½À» Âü°íÇϼ¼¿ä.

// ...
void CAboutDlg::DoDataExchange(CDataExchange* pDX) {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CAboutDlg)
    DDX_Control(pDX, IDOK, m_button);
//}}AFX_DATA_MAP
}
// ...
BOOL CSomeDlg::OnInitDialog() {
    CDialog::OnInitDialog();
    m_font.CreateFont( // m_font´Â ÀÌ Å¬·¡½ºÀÇ ¸â¹ö·Î ¼±¾ðµÅ ÀÖ´Ù°í °¡Á¤
        10, // nHeight
         8, // nWidth
         0, // nEscapement
         0, // nOrientation
         0, // nWeight
         0, // bItalic
         0, // bUnderline
         0, // cStrikeOut
         0, // nCharSet
         OUT_DEFAULT_PRECIS, // nOutPrecision
         0, // nClipPrecision
         DEFAULT_QUALITY, // nQuality
         DEFAULT_PITCH | FF_DONTCARE, // nPitchAnd

Family
         "Fixedsys" // lpszFacename
    );
    m_button.SetFont(&m_font, TRUE);
    return TRUE;
}
// ...

 

<MDI ÇÁ·Î±×·¥ ½ÃÀÛ ½Ã Â÷Àϵå À©µµ¿ì¸¦ ¶ç¿ìÁö ¾ÊÀ¸·Á¸é>

MDI·Î ÇÁ·Î±×·¥À» Çϳª ¸¸µé¸é ÇÁ·Î±×·¥ ½ÃÀ۽à Ç×»ó Â÷Àϵå À©µµ¿ì°¡ ³ªÅ¸³³´Ï´Ù. ÇÁ·Î±×·¥ ½ÃÀ۽à Â÷Àϵå À©µµ¿ì°¡ ³ªÅ¸³ªÁö ¾Êµµ·Ï ÇÒ ¼ö´Â ¾ø´ÂÁö¿ä.

MFC ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå´Â MDI¸¦ »ý¼ºÇÒ ¶§ ÀÚµ¿ÀûÀ¸·Î Â÷Àϵå À©µµ¿ì°¡ ³ªÅ¸³ªµµ·Ï ¼³°èµÅ ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº CSomeApp(CWinAppÀÇ ÀÚ½Ä Å¬·¡½º)ÀÇ InitInstance()¿¡¼­ Á¤ÀǵŠÀֱ⠶§¹®ÀÔ´Ï´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå°¡ ¸¸µé¾î ÁØ InitInstance()¸¦ »ìÆì º¸¸é ´ÙÀ½°ú °°Àº Äڵ带 ã¾Æ º¼ ¼ö ÀÖ½À´Ï´Ù.

BOOL CSomeApp::InitInstance() {
    // ...
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    if(!ProcessShellCommand(cmdInfo))
        return FALSE;
    //...
}

¾Õ Äڵ忡¼­ º¼ ¼ö ÀÖ´Â CCommandLineInfo Ŭ·¡½º´Â ¸í·É¾î ¶óÀο¡¼­ ÀÔ·ÂµÈ ½© ¸í·É¾î(ÀϹÝÀûÀ¸·Î ¿ÀÇÂÇÒ ÆÄÀÏÀ̸§)¿¡ °üÇÑ Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖÀ¸¹Ç·Î ½© ¸í·É¾î°¡ ¾øÀ¸¸é »õ·Î¿î ºó µµÅ¥¸ÕÆ®¸¦ »ý¼ºÇØ º¸¿© ÁÖ°Ô µË´Ï´Ù. µû¶ó¼­ ´ÙÀ½°ú °°ÀÌ Äڵ带 º¯°æÇØ ÁÖ¸é ºó µµÅ¥¸ÕÆ®¸¦ »ý¼ºÇØ º¸¿© ÁÖ´Â °ÍÀ»
°­Á¦ÀûÀ¸·Î ¸·À» ¼ö ÀÖ½À´Ï´Ù.

BOOL CSomeApp::InitInstance() {
    // ...
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
    if(!ProcessShellCommand(cmdInfo))
        return FALSE;
    // ...
}

¿©±â¼­ CCommandLineInfoÀÇ ¸â¹ö º¯¼öÀÎ m_nShellCommand°¡ °¡Áú ¼ö ÀÖ´Â °ªÀº ´ÙÀ½°ú °°½À´Ï´Ù.

enum{
    FileNew,
    FileOpen,
    FilePrint,
    FilePrintTo,
    FileDDE,
    FileNothing = -1
};

ÀÌÁß FileNothingÀÌ MDI ¾ÖÇø®ÄÉÀ̼ÇÀÌ »ý¼ºµÉ ¶§ »õ·Î¿î µµÅ¥¸ÕÆ®¸¦ »ý¼ºÇØ ÁÖ´Â °ÍÀ» ¸·¾Æ ÁÖ´Â °ªÀÔ´Ï´Ù.

 

<ÇÁ·ÎÆÛƼ ½ÃÆ®¿¡ °øÅë ´ÙÀ̾ó·Î±× ¹Ú½º¸¦>

ÇÁ·ÎÆÛƼ ½ÃÆ® ¾È¿¡ °øÅë ´ÙÀ̾ó·Î±×¹Ú½º(¿¹¸¦ µé¸é ±Û²Ã ´ÙÀ̾ó·Î±× ¹Ú½º³ª »ö ¼±Åà ´ÙÀ̾ó·Î±×¹Ú½º µî)¸¦ ³ÖÀ» ¼ö ÀÖ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ¸¸¾à ³ÖÀ» ¼ö ÀÖ´Ù¸é ¾î¶»°Ô ±¸ÇöÇÏ´ÂÁöµµ ¾Ë°í ½Í½À´Ï´Ù.

¾Æ½±°Ôµµ ÇÁ·ÎÆÛƼ ½ÃÆ® ¾È¿¡ °øÅë ´ÙÀ̾ó·Î±× ¹Ú½º´Â ³ÖÀ» ¼ö ¾ø½À´Ï´Ù. °øÅë ´ÙÀ̾ó·Î±× ¹Ú½º´Â ¸ð´Þ ´ÙÀ̾ó·Î±×ÀÔ´Ï´Ù. ±×·¯³ª ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ ÆäÀÌÁö´Â ¸ð´Þ·Î µ¿ÀÛÇÏÁö ¾ÊÀ¸¹Ç·Î ÇÁ·ÎÆÛƼ ½ÃÆ®¿¡ °øÅë ´ÙÀ̾ó·Î±×¸¦ ³ÖÀ» ¼ö´Â ¾ø½À´Ï´Ù. ´Ü, EnumFontFamilies()¿Í EnumFontFaces() µîÀÇ APIÇÔ¼ö¸¦
ÀÌ¿ëÇؼ­ °øÅë ´ÙÀ̾ó·Î±×¿Í °°Àº ±â´ÉÀ» ÇÏ´Â ÆäÀÌÁö´Â ¸¸µé ¼ö ÀÖ½À´Ï´Ù.

 

<ĸ¼Ç¹Ù¿¡ ¾ÖÇø®ÄÉÀÌ¼Ç À̸§¸¸ Ç¥½ÃÇÏ·Á¸é>

MFC·Î ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀÎ À©µµ¿ìÀÇ Ä¸¼Ç¹Ù¿¡´Â Ç×»ó ¾ÖÇø®ÄÉÀÌ¼Ç À̸§°ú ÇÔ²² Untitled ¶Ç´Â ÆÄÀÏ À̸§ÀÌ Ãß°¡µÇ´Âµ¥, ±×³É ¾ÖÇø®ÄÉÀ̼ÇÀÇ À̸§¸¸ ĸ¼Ç¹Ù¿¡ ³ªÅ¸³ª°Ô ÇÏ·Á ÇÕ´Ï´Ù.

CMainFrameÀÇ PreCreateWindow()¸¦ ´ÙÀ½°ú °°ÀÌ ¿À¹ö¶óÀ̵åÇÏ¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {
    // TODO:
    // CREATESTRUCT cs
    cs.style &= ~FWS_ADDTOTITLE ;
    return CFrameWnd::PreCreateWindow(cs);
}