¸Þ¸ðÀå_MFC
@ 2004-06-16 @
^^* ¿©±â¿¡ Á¤¸®µÈ ³»¿ëÀº Ã¥°ú ÀÎÅÍ³Ý µîÀ» Âü°í·Î °³ÀÎÀûÀÎ ¸ñÀûÀ¸·Î Á¤¸®
- 1 ±âŸ
- 2 (MFC) Class
- 2.1 (MFC) CImage Ŭ·¡½º
- 2.1.1 À̹ÌÁö¸¦ Ãâ·ÂÇÏ´Â ¿¹ (MFC)
- 2.1.2 CImage¸¦ ÀÌ¿ëÇÑ À̹ÌÁö ÆÄÀÏ Æ÷¸Ë º¯È¯
- 2.1.3 ȸé ĸÃÄÇϱâ
- 3 ÀÔ·Â µµ±¸
- 3.1 Button
- 3.2 Button/ CBitmapButton
- 3.3 ListCtrl
- 3.4 Property Sheet
- 3.5 CFileDialog¿¡¼ µð·ºÅ丮¸¦ ¼³Á¤Çϱâ
- 3.6 Check Box üũÇϱâ
- 4 ÇÔ¼ö
- 4.1 OnInitDialog() ÇÔ¼ö; ´ëÈ»óÀÚ°¡ ȸ鿡 óÀ½ ³ªÅ¸³¯ ¶§ È£ÃâµÇ´Â ÇÔ¼ö
- 4.2 OnTimer() ÇÔ¼ö
- 4.2.1 ŸÀÌ¸Ó »ç¿ë¹ý
- 4.2.2 2°³ ŸÀ̸Ӹ¦ »ç¿ëÇÑ ¿¹ (Ãâó; www.winapi.co.kr )
- 4.2.3 (MFC) UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, (*handler));
- 4.3 OnWindowPosChanging() ÇÔ¼ö; Dialog¸¦ hidden »óÅ·Π½ÇÇàÇϱâ
- 4.4 »õ·Î¿î Ŭ·¡½º¸¦ Ŭ·¡½º À§Á®µå¸¦ ÅëÇÏ¿© ÀνĽÃ۱â
- 4.5 UpdataData() ÇÔ¼ö
- 4.6 »ç¿ëÀÚ ¸Þ½ÃÁö¸¦ ¹Þ¾Æ CMyViewŬ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡¼ ó¸®Çϱâ
- 4.7 PreTranslateMessage(MSG *pMsg);
- 4.7.1 Á¤ÀÇ
- 4.7.2 (MFC) ´ÙÀ̾ó·Î±×¿¡¼ Enter³ª ESC Ű ¸·±â
- 5 API ÇÔ¼ö
- 5.1 AllocConsole(); API ¿¡¼ Console âÀ¸·Î º¯¼ö Ãâ·Â ÇÏ´Â ¹æ¹ý
- 5.2 CreateEvent()
- 5.3 GetLastError()
- 5.4 ShellExecuteEx(A)
- 6 MFCÀÇ ±¸¼º
|
1 ±âŸ #
#.Control
¢¹
ComboBox ; ¸¹Àº Á¤º¸¸¦
DrowDownList ÇüÅ·Π´ãÀ» ¼ö ÀÖ´Â ÄÁÆ®·Ñ.
* ( (
CDirect9MFCView *)(((
CMainFrame *)m_pMainWnd)->
GetActiveView()) )->
OpenFileMapData();
( (
CMainFrame *)(this->
GetParentFrame()) )->fun();
* if(
GetAsyncKeyState( 'F' )) Isfollow = !Isfollow;
if(
GetAsyncKeyState( 'T' ))
IsThreat = IsThreat;
if(
GetAsyncKeyState( 'H' ))
IsHeat = IsHeat;
if(
GetAsyncKeyState( 'Z' ))
IsZoom = IsZoom;
* MFC¿¡¼ Escape ŰÁ¤ÀÇ
IDR_MAINFRAME ACCELERATORS PRELOAD MOVEABLE PURE
BEGIN
VK_ESCAPE, ID_APP_EXIT, VIRTKEY, NOINVERT
......
END
*
MessageBox(NULL, "
BuildHeightMap- Error", "Cannot found", 0);
AfxMessageBox( "ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù." );
2 (MFC) Class #
2.1 (MFC) CImage Ŭ·¡½º #
CImage´Â MS¿¡¼ .net ÀÌÈĺÎÅÍ Á¦°øµÇ´Â ±×¸² °ü·Ã Ŭ·¡½º·Î
ÀÌÀü
CBitmapÀÇ bmp¸¸ ´Ù·ç´ø°Å¿¡¼ Á»´õ È®ÀåÇÏ¿© Png, Jpg, gifµî ´Ù¾çÇÑ Æ÷¸äÀ» Áö¿øÇÑ´Ù.
CImage ¸¦ ÀÌ¿ëÇϸé À̹ÌÁö ·ÎµùÀº ¹°·ÐÀ̰í
ÁöÁ¤ÇÑ Æ÷¸ËÀÇ À̹ÌÁö ÆÄÀÏÀ» ¸¸µå´Â°Í ¶ÇÇÑ °£´ÜÈ÷ ÇÒ¼ö ÀÖ´Ù.
CImage¸¦ »ç¿ëÇϱâ À§Çؼ´Â ¹Ýµå½Ã
#include <atlimage.h> ¸¦ ÇØ ÁÖ¾î¾ß ÇÑ´Ù.
// View:
:OnPaint()
// À̹ÌÁö°¡ ÀúÀåµÈ À§Ä¡
CString strImagePath = _T("Image.bmp");
//
CImage Ŭ·¡½º º¯¼ö¸¦ »ý¼ºÇÑ´Ù.
CImage Image;
// ÀúÀå µÈ À§Ä¡¿¡ À̹ÌÁö¸¦ ºÒ·¯¿Â´Ù.
HRESULT hResult = Image.Load( strImagePath );
// À̹ÌÁö¸¦ ºÒ·¯ ¿À´Âµ¥ ½ÇÆÐ ÇßÀ» °æ¿ì.
if( FAILED( hResult ) )
{
CString strtmp = _T("ERROR : Failed to load");
strtmp += strImagePath + _T("\n");
TRACE(strtmp);
return;
}
// ÇÁ·Î±×·¥ÀÌ Á¾·á µÇÁö ¾Ê¾Ò´Ù¸é À̹ÌÁö°¡ Á¤»óÀûÀ¸·Î ºÒ·¯¿ÍÁø °ÍÀÌ´Ù.
// À̹ÌÁö¸¦ Ãâ·ÂÇØ º¸ÀÚ.
Image.
TransparentBlt( dc.m_hDC, 0, 0, Image.
GetWidth(), Image.
GetHeight(), RGB(255, 0, 0) );
Image.
BitBlt( dc.m_hDC, 300, 0 );
// Èæ¹éÀ¸·Î º¯°æÇØ º¸ÀÚ.
COLORREF rgb;
for( int x=0; x<Image.
GetWidth(); ++x )
{
for( int y=0; y<Image.
GetHeight(); ++y )
{
rgb = Image.
GetPixel( x, y );
RGBtoGray( rgb );
Image.
SetPixel( x, y, rgb );
}
}
// Èæ¹éÀÇ À̹ÌÁö Ãâ·Â
Image.
BitBlt( dc.m_hDC, 0, 300 );
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// View.cpp ; Èæ¹éÀ¸·Î º¯°æÇÏ´Â ¾Ë°í¸®Áò
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
inline void
RGBtoGray( COLORREF& rgb )
{
BYTE byGray = (
GetRValue(rgb) * 30
+
GetGValue(rgb) * 59
+
GetGValue(rgb) * 11 ) / 100;
rgb = RGB(byGray, byGray, byGray);
}
1. À̹ÌÁö ÆÄÀϸ¦ ·ÎµùÇϰí
2. ·ÎµùÇÑ À̹ÌÁöÀÇ Æ¯Á¤ ¿µ¿ªÀ» ÁöÁ¤ÇѵÚ
3. ±×°ÍÀ» ´Ù½Ã ¶Ç ´Ù¸¥ À̹ÌÁö ÆÄÀÏ¿¡ ÀúÀåÇÏ´Â °ÍÀÌ´Ù.
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// ¿øº»À̹ÌÁöÀÇ Æ¯Á¤ ¿µ¿ªÀ» ÇϳªÀÇ À̹ÌÁö·Î ¸¸µç´Ù
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
BOOL
MakeCellFrameImage(
LPCTSTR
InSourceImageFileName, LPCTSTR
InDestImageFileName,
const
CRect&
InTagetRect, REFGUID
InImageFormatToMake )
{
CImage
TempSourceImage;
CImage
TempDestImage;
CRect
TempTargetRect =
InTagetRect;
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// 1. ¿øº» À̹ÌÁö¸¦
TempSourceImage¿¡ ·Îµù
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
TempSourceImage.Load(
InSourceImageFileName );
CDC* pSourceDC = CDC:
:FromHandle(
TempSourceImage.
GetDC() ); // ¿øº» À̹ÌÁöÀÇ DC¸¦ ¾ò´Â´Ù
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// 2. ÆÄÀÏ·Î ¸¸µé À̹ÌÁö °´Ã¼
TempDestImage »ý¼º
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
int
BitPerPixel = pSourceDC->
GetDeviceCaps( BITSPIXEL );
TempDestImage.Create(
TempTargetRect.Width(),
TempTargetRect.Height(),
BitPerPixel );
CDC* pDestDC = CDC:
:FromHandle(
TempDestImage.
GetDC() );
if( !pSourceDC || !pDestDC )
{ return FALSE; }
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// 3. Ÿ°Ù DC( ¸¸µé À̹ÌÁöÀÇ DC )¿¡ ¿øº» À̹ÌÁö DC ÀÇ ³»¿ëÀ» ¸¦ ¾´´Ù
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
pDestDC->
BitBlt( 0, 0,
TempTargetRect.Width(),
TempTargetRect.Height(),
pSourceDC,
TempTargetRect.left,
TempTargetRect.top, SRCCOPY );
TempDestImage.
ReleaseDC();
TempSourceImage.
ReleaseDC();
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
// 4. À̹ÌÁö ÆÄÀÏ·Î ÀúÀå
//¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ¤Ñ
TempDestImage.Save(
InDestImageFileName,
InImageFormatToMake );
return TRUE;
}
// CImage:
:Save( LPCTSTR
ImageFileName, REFGUID
ImageFormatToMake );
The file type to save the image as. Can be one of the following:
•
ImageFormatBMP An uncompressed bitmap image.
•
ImageFormatPNG A Portable Network Graphic (PNG) compressed image.
•
ImageFormatJPEG A JPEG compressed image.
•
ImageFormatGIF A GIF compressed image.
¸¸ÀÏ BMP Æ÷¸ËÀÇ À̹ÌÁö ÆÄÀÏÀ» ¸¸µé°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇϸéµÈ´Ù.
...
Image.Save( _T("Test"), Gdiplus:
:ImageFormatBMP );
...
CImage capImage;
HDC hProcessDC = ::
GetDC(this->m_hWnd); // <-- ĸÃÄ ÇϰíÀÚÇÏ´Â processÀÇ HWND ¸¦ ³Ö¾îÁØ´Ù.
CRect rect;
::
GetClientRect(this->m_hWnd, rect); // <-- ĸÃÄ ÇϰíÀÚÇÏ´Â processÀÇ HWND ¸¦ ³Ö¾îÁØ´Ù.
if(!capImage.Create(rect.Width(), rect.Height(), 32))
return;
HDC hDC = capImage.
GetDC();
BitBlt(hDC, 0, 0, rect.Width(), rect.Height(), hProcessDC, 0, 0, SRCCOPY);
capImage.Save(_T(".\\Image\\test.jpg"), Gdiplus:
:ImageFormatJPEG);
capImage.
ReleaseDC();
3 ÀÔ·Â µµ±¸ #
*
ºñ½ÁÇÑ ·ùÀÇ ¹öư ó¸®
MFC¿¡¼ Áö¿øÇÏ´Â ¾Æ·¡¿Í °°Àº ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â ¹æ¹ý
ON_COMMAND_RANGE(id1, id2, memberFxn )
1) ¿©±â¼ ¸®¼Ò½º ¹øÈ£ id1, id2 ´Â ½ÃÄö½ºÇÑ ¹øÈ£·Î ºÎ¿©
¿¹·Î
IDC_
BUTTON1 1000 ÀÌ¿´´Ù¸é
IDC_
BUTTON2 1001
IDC_
BUTTON3 1002
:
IDB_
BUTTON8 1007
id1 = IDC_
BUTTON1, id2 = IDC_
BUTTON8 ·Î ¼³Á¤Çϸé
¸â¹öÇÔ¼ö memberFxn À» ÇØÁÖ¸é IDC_
BUTTON1 ~ IDC_
BUTTON8 ¹öưÀ»
´·¯ ÁÙ ¶§¸¶´Ù ¸â¹öÇÔ¼ö memberFxn ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù.
2) À̰ÍÀº À§ÀÚµå·Î ¾ÈµÇ°í ¼öÀÛ¾÷À¸·Î ÄÚµùÇÑ´Ù.
BEGIN_MESSAGE_MAP(
CMainFrame,
CFrameWnd)
// ...
ON_COMMAND_RANGE(IDC_
BUTTON1, IDC_
BUTTON8,
OnButtonClick)
END_MESSAGE_MAP()
void CMyView:
:OnButtonClick(UINT nID)
{
switch ( nID )
{
case IDC_
BUTTON1:
break;
}
}
Çì´õÆÄÀÏ¿¡´Â...
// Generated message map functions
//{{AFX_MSG(
CSourceEditView)
...
afx_msg void
OnButtonClick(UINT nID)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
3) ¸¸¾à À̺¥Æ®°¡ ¹ß»ýÇÏÁö ¾ÊÀ¸¸é ¸ÞÀÎÇÁ·¹ÀÓ¿¡ IDR_MYMENU ÀÌ·±½ÄÀ¸·Î ¸Þ´º¸¦ Çϳª ´õ µî·ÏÇÏ°í ¿©±â¿¡ °¢°¢ÀÇ ¹öư ¸®¼Ò½º ¾ÆÀ̵ð¶û °°Àº°ÍÀ¸·Î ¸Þ´º¸¦ Ãß°¡ÇÑ´Ù.
3.2 Button/ CBitmapButton #
*
CBitmapButton ¸¸µå´Â ¹ý_1
CBitmapButtonÀ¸·Î ¸¸µç ¹öưÀº push button Çü½ÄÀÌ´Ù.
1) ¸ÕÀú Form¿¡ ¹öưÀ» ¸¸µé°í Style¿¡¼ Owner Draw¸¦ ²À üũ
2) ¹öưÀÇ Ä¸¼ÇÀ» °£´ÜÇÏ°Ô ÁöÁ¤(Áß¿ä)
¿¹¸¦ µé¾î ĸ¼ÇÀÌ "ONE"À̶ó¸é..
3) ÀÌÁ¦ ¸®¼Ò½º¿¡ ¹öư ±×¸²µéÀ» Ãß°¡ÇÕ´Ï´Ù.
À̶§ Ãß°¡ ÇÏ´Â ¸®¼Ò½º À̸§Àº
2¹ø¿¡¼ ÁöÁ¤ÇÑ Ä¸¼ÇÀÇ À̸§µÚ¿¡ "D" "F" "U" "X" ¸¦ ºÙÀÔ´Ï´Ù
À̸¦Å׸é "ONED" "ONEF" "ONEU" "ONEX" °°Àº ½ÄÀ¸·Î ¸»ÀÔ´Ï´Ù.
"U"=UP/ "D"=Down/ "F"=Æ÷Ä¿½º/ "X"=disable ÀÇ ¶æ
4)
CBitmapButton °´Ã¼¸¦ ¸â¹öº¯¼ö·Î ¸¸µì´Ï´Ù.
CBitmapButton m_
ButtonOne;
5)
OnInitialUpdate() ¿¡ ´ÙÀ½°ú °°ÀÌ ¾¹´Ï´Ù
m_
ButtonOne.
AutoLoad(IDC_BUTTON_ONE,this);
*
CBitmapButton ¸¸µå´Â ¹ý_2
¹æ¹ý 1°ú Å©°Ô ´Ù¸£Áö ¾Ê°í, ¸Ê ¿¬°á ¹æ¹ý¿¡¼ Â÷À̰¡ ÀÖ´Ù.
1) ¹öưÀÇ ¼Ó¼ºÁß¿¡ property -> style ¿¡¼ Owner draw ²À check !!
2) ºñÆ®¸ÊÀ¸·Î ¾º¿ï ±×¸²µéÀ» ÇÁ·ÎÁ§Æ®ÀÇ Bit ¸ã ºÎºÐ¿¡ Insert ½ÃÅ´
(Á¤ÀûÀÎ ´À³¦À» ÇÇÇϱâ À§ÇØ ±×¸²Àº µÎ°³¸¦ Áغñ)
3) ÇØ´ç ´ÙÀÌ¾Ë·Î±× ¹Ú½ºÀÇ ¹öư¿¡ ÇØ´çÇÏ´Â º¯¼ö¸¦ Ãß°¡½ÃÄÑ ÁÜ(¹°·Ð ÇØµå¿¡ º¯¼ö¸¦ Á¤ÀÇ)
.h ÆÄÀÏ ºÎºÐ¿¡¼ public ºÎºÐ¿¡ ¸¸µé¾î Áֽðí
CBitmapButton m_OK;
CBitmapButton m_Cancel;
.cpp ºÎºÐ¿¡
void CADD_AND_DEL_FRIEND::
DoDataExchange(
CDataExchange* pDX)
{
CDialog:
:DoDataExchange(pDX);
//{{AFX_DATA_MAP(CADD_AND_DEL_FRIEND)
...
DDX_Control(pDX, IDOK, m_OK); // º¯¼ö¸¦ ÇØ´ç ¾ÆÀ̵ð¿Í ¿¬°á ½ÃÄÑÁØ´Ù.
DDX_Control(pDX, IDCANCEL, m_Cancel);
//}}AFX_DATA_MAP
}
4) ´ÙÀ̾˷αװ¡ »ý¼ºµÇ´Â ÃʱâÈ ºÎºÐ¿¡¼ ¹öư°ú À̹ÌÁö¸¦ ¿¬°á½ÃÄÑÁØ´Ù.
BOOL CADD_AND_DEL_FRIEND::
OnInitDialog()
{
CDialog:
:OnInitDialog();
// ¹öưÀÌ ´·¯Áö±âÀü À̹ÌÁö¿Í ´·ÈÀ»¶§ À̹ÌÁö¸¦ ¼³Á¤ÇØ ÁØ´Ù.
m_OK.
LoadBitmaps( IDB_OKU, IDB_OKD );
m_Cancel.
LoadBitmaps( IDB_
CancelU, IDB_
CancelD );
// ¹öưÀ» À̹ÌÁö Å©±â¿¡ ¸ÂÃç¼ ¾º¿öÁØ´Ù.
m_OK.
SizeToContent();
m_Cancel.
SizeToContent();
return true;
}
*
ItemÀ» º¯°æÇßÀ»¶§ À̺¥Æ® ó¸®
ItemÀ» º¯°æÇßÀ»¶§ Áï
OnItemChanged¸Þ¼¼Áö°¡ ¹ß»ýÇϴµ¥
Ŭ·¡½º À§Àúµå¿¡¼ NM_CLICK À̺¥Æ® Çڵ鷯¸¦ ³Ö°í..
¾Æ·¡¿Í °°Àº ³»ºÎ Äڵ带 »ðÀÔÇÏ¿© ¿øÇÏ´Â ÀÛ¾÷À» ÇÑ´Ù
void CxxxDlg:
:OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pList = (NM_LISTVIEW*)pNMHDR;
ASSERT(pList);
'*' pResult = 0;
if(pList->iItem == -1) return;
¸®½ºÆ®ÄÁÆ®·Ñ.
GetItemData(pList->iItem);
¸®½ºÆ®ÄÁÆ®·Ñ.
GetItemText(pList->iItem, ¼ºê¾ÆÀÌÅÛ À妽º);
}
*
ÃʱâȽà ÀÓÀÇÀÇ ¾ÆÀÌÅÛ ¼±ÅÃÇϱâ
¸ÕÀú
OnInitDialog()¿¡¼ ÃʱâÈ ÇÑ´Ù.
m_
ListCtrl.
SetExtendedStyle(LVIS_SELECTED| LVS_NOLABELWRAP | LVS_EX_GRIDLINES | LVS_EX_FLATSB | LVS_EX_FULLROWSELECT);
m_
ListCtrl.
ModifyStyle(0,LVS_SHOWSELALWAYS); <-- ¿ä°Å Áß¿äÇÔ ¹Ýµå½Ã ÇÒ°Í.
¼±ÅÃÇϰíÀÚ ÇÒ¶§ ¿ä·¸°Ô ÇÏ¸é µÊ´Ï´Ù.
m_
ListCtrl.
SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); <-- ¼±ÅÃÇϰí, ȸ»öÀ¸·ÎµÊ
m_
ListCtrl.
EnsureVisible(i,false); <--½ºÅ©·ÑÇϰí
m_
ListCtrl.
SetFocus();<--Æ÷Ä¿½ºÁÖ°í ÆÄ¶õ»öÀ¸·Î µÊ
¼±ÅÃÇϸé ÀÌÀü²¨´Â ÀÚµ¿ ÇØÁ¦.
*
Full Row Select style·Î º¯È¯
m_
ListCtrl.
SetExtendedStyle( LVS_NOLABELWRAP | LVS_EX_GRIDLINES | LVS_EX_FLATSB | LVS_EX_FULLROWSELECT );
*
ƯÁ¤ ¾ÆÀÌÅÛÀÌ º¸À̵µ·Ï ½ºÅ©·Ñ Çϱâ
m_ctrlPacketLog.
EnsureVisible( num, TRUE );
* Âü°í»çÀÌÆ®
3.4 Property Sheet #
* ÇÁ·ÎÆÛƼ ½¬Æ®¿¡¼ Ã¹È¸é ¼³Á¤

mysheet.
SetActivePage(npage);
3.5 CFileDialog¿¡¼ µð·ºÅ丮¸¦ ¼³Á¤Çϱâ #
OPENFILENAME CFileDialog:
:m_ofn ;
typedef struct tagOFN {
...
LPCTSTR lpstrInitialDir; // ¿©±â¼ ¼³Á¤
...} OPENFILENAME;
»ç¿ë¿¹)
char currentDir[ 256 ]; // ÇöÀçÀÇ °æ·Î
GetCurrentDirectory( NAME_MAX_SIZE, currentDir );
strcat( currentDir, "\\Data\\" );
CFileDialog dlg(...);
dlg.m_ofn.lpstrInitialDir = currentDir;
dlg.
DoModal();
3.6 Check Box üũÇϱâ #
üũ¹Ú½º.
SetCheck(int A); A°¡ 1À̸é üũ, 0À̸é ÇØÁ¦
1)
CButton* chkbox1 = (
CButton*)
GetDlgItem(IDC_
CHECK1);
int i = chkbox1->
GetCheck(); ÇöÀçÀÇ »óŸ¦ ±¸ÇÔ
chkbox1->
SetCheck(1);
2)
GetDlgItem(ID_Model_CHK)->
SetCheck(1);
3) Chk :
m_Model_Chk = TRUE;
UpdateData(FALSE);
Chk ÇØÁ¦ :
m_Model_Chk = FALSE;
UpdateData(FALSE);
4 ÇÔ¼ö #
4.1 OnInitDialog() ÇÔ¼ö; ´ëÈ»óÀÚ°¡ ȸ鿡 óÀ½ ³ªÅ¸³¯ ¶§ È£ÃâµÇ´Â ÇÔ¼ö #
-.
DoModal ÇÔ¼ö·Î È£ÃâµÈ ´ÙÀÌ¾Ë·Î±× À§Ä¡ Á¦¾î
BOOL
CDialogMD2::
OnInitDialog()
{
CDialog:
:OnInitDialog();
SetWindowPos(NULL, 100, 150, 0,0, SWP_NOZORDER | SWP_NOSIZE);
return TRUE;
}
4.2 OnTimer() ÇÔ¼ö #
À©µµ¿ì üÁ¦ÇÏ¿¡¼ ¾îÇÃÀº ¸Þ½ÃÁö¿Í ÇÁ·Î½ÃÁ®·ÎºÎÅÍ ½ÇÇàÀÌ ½ÃÀ۵ǰí, ½Ç»óÀº ¸ðµÎ Äݹé ó¸®ÇÑ´Ù.
ŸÀ̸Ӷõ °ÍÀº ¾î¶»°Ô »ý°¢ÇÏ¸é ¾²·¹µå¿Í ºñ½ÁÇÑ ¸éÀÌ Àִµ¥, Â÷ÀÌÁ¡À» ¾Ë¾Æ¾ß ÇÑ´Ù.
ŸÀ̸Ӷõ ÁöÁ¤ÇÑ ½Ã°£¸¶´Ù WM_TIMER ¸Þ½ÃÁö¸¦ ¹ß»ý½ÃÄÑ À̰ÍÀÇ Çڵ鷯¸¦ ÅëÇØ ÁÖ±âÀûÀ¸·Î ¾î¶² JOBÀ» ó¸®ÇÏ´Â °ÍÀ» ¸»ÇÑ´Ù. ÁÖ±âÀûÀ¸·Î ¸Þ½ÃÁö¸¦ ¹ß»ý½ÃÄÑ¾ß Çϱ⠶§¹®¿¡ ÀÌ ¿ªÇÒÀº ¹°·Ð ¾²·¹µå°¡ ´ã´çÇÑ´Ù.
¿©±â¼ WM_TIMER ¸Þ½ÃÁö¸¦ ÁÖ±âÀûÀ¸·Î ¹ß»ý½ÃÄÑÁÖ´Â ¾²·¹µå´Â Ä¿³Î¿¡¼ µ¹¾Æ°£´Ù. »ç¿ëÀÚ°¡ ¾²·¹µå¸¦ ¸¸µé¾î ŸÀ̸ÓÀÇ ±â´ÉÀ» 100% ±¸ÇöÇÒ ¼ö ÀÖÁö¸¸ ¿î¿µÃ¼Á¦¿¡¼ Áö¿øÇÏ´Â ÀÌÀ¯´Â Å©°Ô 2°¡ÁöÀÌ´Ù.
1. ¿î¿µÃ¼Á¦°¡ °ü¸®ÇÏ´Â°Ô ºÒÇÊ¿äÇÑ ¸®¼Ò½º ¼Ò¸ð¸¦ ÁÙÀÓ
2. Á¤È®µµ Çâ»ó
¾²·¹µå°¡ ÀÏÁ¤ÇÑ ½Ã°£ °£°ÝÀ¸·Î ¸Þ½ÃÁöÅ¥¿¡ WM_TIMER ¸¦ ³Ö¾îÁÖ´Â °Í°ú ±×³É ¾²·¹µå¸¦ ÀÌ¿ëÇÏ´Â °ÍÀº Â÷À̰¡ ÀÖ´Ù.
¾²·¹µå¿¡¼ ÇÊ¿äÇÑ Ã³¸®¸¦ ÇßÀ» °æ¿ì ½ÇÇà È帧Àº ´ç¿¬È÷ ¾²·¹µå ÀÚ½ÅÀÌ °¡Áö°Ô µÈ´Ù. ÇÏÁö¸¸ WM_TIMER ¸¦ ¸Þ½ÃÁöÅ¥¿¡ ³Ö¾îÁÙ °æ¿ì ¿î¿µÃ¼Á¦°¡ ÀÌ¿Í ¿¬°áµÈ Çڵ鷯 ÇÔ¼ö¸¦ CALL ÇØÁØ´Ù.
#.
°á°úÀûÀ¸·Î ¾îÇÃÀº ÀÚ±â Àڽſ¡ ÇÒ´çµÈ ƽŸÀÓ ÀϺθ¦ Âɰ³ ó¸®ÇÏ´Â Çü½ÄÀÌ µÈ´Ù. À̰ÍÀº ¸Å¿ì Áß¿äÇѵ¥,
¾î¶² ¸ÞÀÎ ¾²·¹µå A ¿¡¼ B ¶ó´Â ¾²·¹µå¸¦ »ý¼ºÇß´Ù°í °¡Á¤ÇÒ ¶§... A ¾²·¹µå°¡ Ä¿³Î ¸®¼Ò½º¸¦ ÇÒ´ç¹Þ¾Æ »ç
¿ëÇϰí ÀÖ´Ù°í °¡Á¤ÇßÀ» ¶§ B ¾²·¹µå¿¡¼ ÀÌ ¸®¼Ò½º¿¡ Á¢±ÙÇÏ·Á°í ÇÒ °æ¿ì °ÅºÎ´çÇÒ °¡´É¼ºÀÌ ³ô´Ù. API
¸¦ ÅëÇØ ¾î¶² ¾îÇÃÀ̵ç ÇÁ·Î¼¼½º À̸§¸¸ ¾Ë¸é À©µµ¿ì ÇÚµéÀ̳ª, ÀνºÅϽº ÇÚµéÀ» ½±°Ô °¡Á®¿Ã ¼ö ÀÖ´Ù.
Áï, ¿î¿µÃ¼Á¦¿¡¼ ¸·¾ÆÁÖÁö ¾ÊÀ¸¸é ¾ÇÀÇÀûÀÎ ¸ñÀûÀÇ ¾îÇÃÀÌ ´Ù¸¥ ¾îÇÃÀ» ½±°Ô Á¶ÀÛÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù.
½±°Ô ¿¹¸¦ µé¾î ¾î¶² ÇÁ·Î¼¼½º »ó¿¡¼ À©µµ¿ì(Ä¿³Î ¸®¼Ò½º)¸¦ »ý¼ºÇϰí, ¾²·¹µå¿¡¼ ±× ÇÁ·Î¼¼½ºÀÇ À©µµ¿ì
¸¦ Á¶ÀÛÇÒ °æ¿ì ¿î¿µÃ¼Á¦¿¡°Ô ºí·°´çÇØ ¿À·ù ¹ß»ý È®·üÀÌ ³ô´Ù.
#.
¹°·Ð ÀÌ·² ¶§ ŸÀ̸Ӹ¦ »ç¿ëÇϸé ÀÚ±â ÀÚ½ÅÀÌ Á¢±ÙÇÏ´Â °ÍÀ̹ǷΠ¾Æ¹«·± Á¦¾àÀÌ ¾ø´Ù. µû¶ó¼ ÁÖ±âÀûÀ¸·Î ±×·¡ÇÈ º¯È°¡ ÇÊ¿äÇÑ °ÔÀÓ µî¿¡¼ÀÇ Ã³¸®´Â ¸ðµÎ ŸÀ̸ӷΠ󸮵ȴÙ.
ŸÀ̸Ӵ ¾à°£ÀÇ Á¦¾à »çÇ×ÀÌ ÀÖ´Ù. À§¿¡¼ ¸»Çßµí ¸Þ½ÃÁöÅ¥°¡ ÇÊ¿äÇѵ¥, ¸Þ½ÃÁöÅ¥´Â À©µµ¿ì¸¦ »ý¼º ÇÒ °æ¿ì ¸¸µé¾îÁø´Ù. ±×·¡¼ ³×Æ®¿÷ °ü·Ã ¾îÇà Áß Å¸ÀÌ¸Ó »ç¿ëÀ» À§Çؼ ºó À©µµ¿ì¸¦ Çϳª »ý¼ºÇÏ´Â ¹æ½ÄÀÇ ¼³°èµµ ÀÖ´Ù. MFCÀÇ °æ¿ì
CWnd Ŭ·¡½º¸¦ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ ¸¸µé¾î Create ÇØÁÖ´Â µîÀÇ Ã³¸®°¡ µé¾î°£´Ù.
Ä¿³Î ¸®¼Ò½º Á¢±ÙÀÌ ÇʼöÀÎ °æ¿ì, ŸÀ̸Ӹ¦ ÀÌ¿ëÇÏ´Â°Ô ¹Ù¶÷Á÷ÇÏ´Ù.
4.2.1 ŸÀÌ¸Ó »ç¿ë¹ý #
UINT_PTR
SetTimer(m_hWnd, nI
DEvent, nElapse, lpfnTimer);
1¹ø ÀÎÀÚ´Â À©µµ¿ì ÇÚµé. ¿Ö ÇÚµéÀÌ µé¾î°¡´À³Ä.. À§¼ ¼³¸íÇßµí ¸Þ½ÃÁöÅ¥°¡ ÇÊ¿äÇϱ⠶§¹®
2¹ø ÀÎÀÚ´Â À̺¥Æ® ID. ½±°Ô ¸»ÇØ Å¸À̸Ӹ¦ ¿©·¯°³ µ¹¸± ¼ö ÀÖÀ¸¹Ç·Î À̰ÍÀ» ±¸ºÐÇϱâ À§ÇÑ ³Ñ¹ö°ªÀ¸·Î 0 À» Á¦¿ÜÇÑ °ªÀ» ³Ö¾îÁØ´Ù.
3¹ø ÀÎÀÚ´Â ms ´ÜÀ§ÀÇ ½Ã°£ °£°Ý. 1ÃÊ´Â 1000ms..
4¹ø ÀÎÀڴ ŸÀÌ¸Ó À̺¥Æ® ¹ß»ý ½Ã Äݹé Çڵ鷯.
void Func(HWND, UINT, UINT_PTR, DWORD) ÇüÅ·ΠÇÔ¼ö Æ÷ÀÎÅ͸¦ ÁöÁ¤ÇØÁÙ ¼ö Àִµ¥,
À̰ÍÀº NULL ·Î ÁöÁ¤ÇÒ °æ¿ì µû·Î ÇÁ·Î½ÃÁ®¿¡¼ WM_TIMER ¹ß»ý ½Ã Çڵ鷯 󸮸¦ ÇØµµ »ó°ü¾ø´Ù.
¸®ÅϰªÀº nI
DEvent ¿¡ ÁöÁ¤ÇÑ °ªÀ¸·Î ³ª¿Â´Ù. À̶§ ÀÌ¹Ì ÁöÁ¤ÇÑ ID·Î »ý¼ºÇÑ Å¸À̸Ӱ¡ ÀÖÀ» °æ¿ì ȤÀº ±âŸ ´Ù¸¥ ÀÌÀ¯·Î ŸÀÌ¸Ó µî·ÏÀÌ ½ÇÆÐÇÏ¸é ¸®ÅϰªÀº 0 ÀÌ µÈ´Ù. ¿¡·¯ ¿©ºÎ´Â 0 ÀÌ³Ä ¾Æ´Ï³Ä·Î ÆÇ´ÜµÇ¹Ç·Î nI
DEvent ¿¡ 0 À» ÁöÁ¤ÇÒ ¼ö ¾ø´Ù.
4.2.2 2°³ ŸÀ̸Ӹ¦ »ç¿ëÇÑ ¿¹ (Ãâó; www.winapi.co.kr ) #
LRESULT CALLBACK
WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rt;
char Mes[]="ŸÀÌ¸Ó ¿¹Á¦ÀÔ´Ï´Ù.";
switch(iMessage) {
case WM_CREATE:
SetTimer(hWnd,1,500,NULL);
SetTimer(hWnd,2,3000,NULL);
return 0;
case WM_TIMER:
switch(wParam)
{
case 1:
GetWindowRect(hWnd,&rt);
rt.left+=5;
rt.right+=5;
MoveWindow(hWnd,rt.left,rt.top,rt.right-rt.left,rt.bottom-rt.top,TRUE);
break;
case 2:
MessageBeep(0);
break;
}
return 0;
case WM_PAINT:
hdc=
BeginPaint(hWnd, &ps);
TextOut(hdc,10,10,Mes,lstrlen(Mes));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
KillTimer(hWnd,2);
PostQuitMessage(0);
return 0;
}
return(
DefWindowProc(hWnd,iMessage,wParam,lParam));
}
4.2.3 (MFC) UINT_PTR CWnd::SetTimer(UINT_PTR nIDEvent, UINT nElapse, (*handler)); #
MFCÀÇ °æ¿ì
CWnd ÀÇ ¸Þ½áµå·Î µî·ÏµÈ
SetTimer ¸¦ È£ÃâÇÑ´Ù.
UINT_PTR CWnd:
:SetTimer(UINT_PTR nI
DEvent, UINT nElapse, (*handler)); ÇüÅ·Î,
CWnd ÀÚü°¡ À©µµ¿ì¸¦ »ý¼º ¹× °ü¸®Çϱâ À§ÇÑ ·¡ÇΠŬ·¡½ºÀ̹ǷΠµû·Î À©µµ¿ì ÇÚµéÀÌ ÇÊ¿äÇÏÁö ¾Ê´Ù.
¶Ç Çڵ鷯¸¦ ÁöÁ¤ÇØÁÖÁö ¾ÊÀ» °æ¿ì ±âº» Çڵ鷯´Â CWnd:
:OnTimer ·Î ÁöÁ¤µÈ´Ù.
ŸÀ̸Ӹ¦ Á×ÀÏ ¶§´Â
BOOL CWnd:
:KillTimer(UINT_PTR nI
DEvent); ¸¦ »ç¿ëÇÑ´Ù.
Çڵ鷯´Â MFCÀÇ °æ¿ì ±âº»À¸·Î
void CWnd:
:OnTimer(UINT nI
DEvent); ·Î ÁöÁ¤µÇ¸ç,
ID ¸¦ ÅëÇØ ŸÀÌ¸Ó À̺¥Æ®·Î·Î ±¸ºÐµÇ°í 󸮵ȴÙ.
ÇÁ·Î¼¼½º´Â ¿ì¼± ¼øÀ§¿¡ µû¶ó ¿î¿µÃ¼Á¦·ÎºÎÅÍ ÁöÁ¤µÈ ƽ´ÜÀ§·Î ½ÇÇà È帧À» ÇÒ´ç¹Þ´Â´Ù.
ƽŸÀÓÀº ¼¹ö¿ëÀÌ³Ä °³ÀοëÀ̳Ŀ¡ µû¶ó ´Ù¸¥µ¥, Áß¿äÇÑ °ÍÀº ÇöÀç ÇÁ·Î¼¼½º¿¡ ¾ðÁ¦ ½ÇÇà È帧ÀÌ µ¹¾Æ¿ÃÁö, ±×¸®°í ¸î ƽÀÌ ÇÒ´çµÉÁö ¸ð¸¥´Ù´Â Á¡ÀÌ´Ù.
µû¶ó¼ ŸÀÌ¸Ó »ý¼º ½Ã ÁöÁ¤ÇÑ ½Ã°£Àº ¸Å¿ì Á¤È®µµ°¡ ¶³¾îÁø´Ù. ±×·¡¼ º°µµÀÇ º¸Á¤ÀÌ ÇÊ¿äÇѵ¥,
½Ã°£ ÃøÁ¤ ÇÔ¼ö·ù¸¦ »ç¿ëÇÑ´Ù.
-. time ÇÔ¼öÀÇ °æ¿ì ÃÊ´ÜÀ§¹Ç·Î ÀÏ´Ü Á¦¿Ü
-. clock ÇÔ¼öÀÇ °æ¿ì ms ´ÜÀ§À̱ä ÇÏÁö¸¸ ´Ü¼øÈ÷ ÇöÀç ÇÁ·Î¼¼½ºÀÇ ½ÃÀÛ ½Ã°£°ú ƽÀÌ µ¹¾Æ¿Â ½Ã°£¸¸ °è»êÇÑ °ÍÀ̹ǷΠÁ¦¿Ü..
-.
QueryPerfomanceCounter ´Â Á¤¹Ðµµ´Â °¡Àå ³ôÁö¸¸ ºÎÇϰ¡ Ä¿¼ Á¦¿Ü..
-. °á±¹ °¡Àå ¸¹ÀÌ »ç¿ëÇÏ´Â °Ç timeGetTime ÀÌ´Ù.
4.3 OnWindowPosChanging() ÇÔ¼ö; Dialog¸¦ hidden »óÅ·Π½ÇÇàÇϱâ #
-. À©µµ¿ìÁî ÇÁ·Î±×·¥¿¡¼ À©µµ¿ì¸¦ °¨Ãâ ¶§´Â
ShowWindow(SW_HIDE); ¸¦ È£ÃâÇÏ¸é µÇÁö¸¸, ¹®Á¦´Â ´ÙÀ̾ó·Î±×¸¦ hidden»óÅ·Π½ÇÇà ÇÏ·Á°í,
ShowWindow(SW_HIDE)¸¦
OnInitDialog()¿¡¼ È£ÃâÇϸé 󸮰¡ ¾ÈµÈ´Ù.
OnInitDialog()ÀÇ Ã³¸®°¡ ³¡³ª´Â ½ÃÁ¡¿¡¼
ShowWindow(SW_SHOW)¸¦ È£ÃâÇϱ⠶§¹®ÀÌ´Ù.
-. hiddenÀ¸·Î ½ÇÇàÇϱâ À§Çؼ´Â »ý¼ºµÇ´Â À©µµ¿ìÀÇ ½ºÅ¸ÀÏ¿¡¼ ¼Ó¼ºÀ» »©ÁÖ¾î¾ß ÇÑ´Ù.
¼Ó¼º 󸮸¦ À§Çؼ "WM_WINDOWPOSCHANGING" À©µµ¿ì ¸Þ½ÃÁö ó¸® ÇÔ¼ö¸¦ »ý¼ºÇÏ°í ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù.
void CYourDialog:
:OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
lpwndpos->flags &= ~SWP_SHOWWINDOW; // ¼Ó¼º¿¡¼ SWP_SHOWWINDOW Á¦°Å
CDialog:
:OnWindowPosChanging(lpwndpos);
}
4.4 »õ·Î¿î Ŭ·¡½º¸¦ Ŭ·¡½º À§Á®µå¸¦ ÅëÇÏ¿© ÀνĽÃ۱â #
-. ¸ÕÀú ÇÁ·ÎÁ§Æ® À̸§À¸·Î µÈ XXXX.clw ÆÄÀÏÀ» »èÁ¦ÇÑ´Ù. ¸¸ÀÏÀ» À§ÇØ À̸§À» ¹Ù²ãµÎ´Â °ÍÀÌ ÁÁ´Ù.
-. ±× ´ÙÀ½ Ŭ·¡½º À§Á®µå¸¦ ½ÇÇà½Ã۸é Ŭ·¡½º¿¡ ´ëÇÑ Á¤º¸°¡ ¾ø±â ¶§¹®¿¡ »õ·Ó°Ô ¼³Á¤ÇÏ´Â ´ÙÀ̾ó·Î±×°¡ ³ªÅ¸³´Ù. ¿©±â¼ Project List¿¡ ¸ðµÎ µî·Ï½ÃŰ¸é µÈ´Ù. ±×·± ÈÄ ´Ù½Ã Ŭ·¡½º À§Á®µå¸¦ ½ÇÇà½ÃŰ¸é ±âÁ¸ÀÇ Å¬·¡½º »Ó¸¸ ¾Æ´Ï¶ó »õ·Ó°Ô Ãß°¡ÇÑ Å¬·¡½ºµµ À§Á®µå°¡ ÀνÄÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.
4.5 UpdataData() ÇÔ¼ö #
-. ȸ鿡 µ¥ÀÌÅ͸¦ ³ªÅ¸³»±â À§Çؼ´Â º¯¼ö¿¡ µî·ÏµÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ ´ëÈ »óÀÚ·Î Àü¼ÛÇÏ´Â ÇÔ¼ö
(º¯¼ö¿¡ µ¥ÀÌÅ͸¦ ±â·ÏÇÏ¿´´Ù ÇÏ¿©µµ ȸ鿡´Â ÀÔ·ÂµÈ ¸ð½ÀÀÌ ³ªÅ¸³ªÁö ¾Ê´Â´Ù´Â ÀǹÌ)
-.
UpdateData(FALSE); º¯¼ö¸¦ ´ëÈ »óÀÚ·Î Àü¼Û
(ÇöÀç º¯¼ö¿¡ µ¥ÀÌÅ͸¦ µî·ÏÇϰí À̰ÍÀ» ´ëÈ »óÀÚ·Î Àü¼ÛÇÒ ¶§)
UpdateData(TRUE); ´ëÈ »óÀÚ¿¡¼ º¯¼ö·Î µ¥ÀÌÅ͸¦ Àü¼Û
(´ëÈ »óÀÚ¿¡¼ ¿¡µðÅÍ »óÀÚ °°Àº ÀÚ¿ø¿¡ Á¤º¸¸¦ º¯ÇüÇϰí, ÀÌ º¯ÇüµÈ µ¥ÀÌÅ͸¦ ´Ù½Ã ÀÚ¿øÀ¸·Î ¹Þ¾Æ¾ß ÇÒ °æ¿ì)
4.6 »ç¿ëÀÚ ¸Þ½ÃÁö¸¦ ¹Þ¾Æ CMyViewŬ¶óÀÌ¾ðÆ® ¿µ¿ª¿¡¼ ó¸®Çϱâ #
-. ºäŬ·¡½º¿Í ´ÙÀ̾ó·Î±×Ŭ·¡½ºÀÇ ¿ªÇÒÀº ´ÙÀ½°ú °°°í, ´ÙÀ̾ó·Î±×Ŭ·¡½º´Â ºäŬ·¡½º¸¦ ¾Ë°í ÀÖ¾î¾ßÇÑ´Ù.
ºäŬ·¡½º ==> °¨½ÃÀÚ (½ºÅ¸Å©·¡ÇÁÆ®ÀÇ ¿ÉÀú¹ö¿Í µ¿ÀÏÇÑ ¿ªÇÒ)
´ÙÀ̾ó·Î±×Ŭ·¡½º ==> Á¤º¸ÀǺ¯È
-. ¹°·Ð
SetParent() ÈÄ¿¡
GetParent()·Î ÇØµµ µÇÁö¸¸
À§¿Í °°Àº µðÀÚÀÎÆÐÅÏÀ» °í·ÁÇÏ¸é ´ÙÀ½°ú °°´Ù.(¿ÉÀú¹öÆÐÅÏ)
1) ´ÙÀ̾ó·Î±×Ŭ·¡½º¿¡¼ ºäŬ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ÀúÀåÇÒ¼ö ÀÖ´Â ¸â¹öº¯¼ö¸¦¸¸µé°í
2) ºäŬ·¡½º ÃʱâÈÇÔ¼öºÎºÐ¿¡¼ ´ÙÀ̾ó·Î±×Ŭ·¡½º¿¡ Æ÷ÀÎÅ͸¦ ³Ñ°ÜÁÖ¸é µË´Ï´Ù.
3) ±×¸®°í ¸Þ½ÃÁö¸¦ Á¤ÀÇÇÕ´Ï´Ù.
WM_USER +1 ÀÇ ¸Þ½ÃÁö¸¦ ¸¸µç´Ù±¸ ÇÒ¶§..
ºäŬ·¡½ºÀÇ Çì´õºÎºÐ..
afx_msg long
OnMyMsg(WPARAM) wparam,LPARAM lparam);
ºäŬ·¡½ºÀÇ ¸Þ½ÃÁö¸Ê ºÎºÐ..
ON_MESSAGE ( WM_USER+1,
OnMyMsg)
´ÙÀ̾ó·Î±×Ŭ·¡½º ³»ºÎ¿¡¼ ¸Þ½ÃÁöÈ£Ãâ½Ã..
pViewClass ->
SendMessage(WM_USER+1 ,Á¤º¸1, Á¤º¸2);
4.7 PreTranslateMessage(MSG *pMsg); #
@ 2010-03-17 @
virtual BOOL
PreTranslateMessage(MSG *pMsg);
pMsg : ó¸®ÇÏ´Â ¸Þ¼¼Áö¸¦ Æ÷ÇÔÇÑ MSG ±¸Á¶Ã¼ÀÇ Æ÷ÀÎÅÍ
ÀÌ Æ÷ÀÎÅÍ¿¡´Â ¸Þ¼¼Áö¸¦ º¸³»ÂÊÀÇ À©µµ¿ì ÇÚµé°ú º¸³»¿Â ¸Þ¼¼ÁöµîÀÇ Á¤º¸°¡ ÀúÀåµÈ´Ù.
MSG±¸Á¶Ã¼
typedef struct tagMSG {
HWND hwnd; // ¸Þ¼¼Áö¸¦ °Ç³»¹Þ´Â À©µµ¿ìÀÇ ÇÚµé
UINT message; // ¸Þ¼¼Áö ¹øÈ£(WM_RBUTTONDOWNµî)
WPARAM wParam; // ¸Þ¼¼ÁöÀÇ ºÎ°¡ Á¤º¸
LPARAM lParam; // ¸Þ¼¼ÁöÀÇ ºÎ°¡ Á¤º¸
DWORD time; // ¸Þ¼¼Áö°¡ Æ÷½ºÆ®µÈ ½Ã°£
POINT pt; // ¸Þ¼¼Áö°¡ Æ÷½ºÆ®µÇ¾úÀ» ¶§ÀÇ Ä¿¼À§Ä¡(½ºÅ©¸° ÁÂÇ¥)
} MSG;
-.
PreTranslateMessage´Â À©µµ¿ì ¸Þ¼¼Áö°¡
TranslateMessage³ª
DispatchMessage¿¡ ÀüÇØÁö±â Àü¿¡ ó¸®ÇÒ Çʿ䰡 ÀÖÀ»¶§ »ç¿ëµÇ¸ç, À©µµ¿ì ¸Þ¼¼Áö°¡ ¹ß»ýµÇ¸é
TranslateMessage³ª
DispatchMessage¿¡ °¡±âÀü¿¡
PreTranslateMessage¸¦ °ÅÄ¡°Ô µÈ´Ù.
-.
PreTranslateMessage´Â ¸Þ¼¼Áö ¸ÊÀ» »ç¿ëÇÒ ¼ö ÀÖ°í, À©µµ¿ì ¸Þ¼¼Áö°¡ °¢ ÄÁÆ®·Ñ¿¡ ÀüÇØÁö±â Àü¿¡ ±× ¸Þ¼¼Áö¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
- MFC¿¡¼ ŰÀÔ·ÂÀ» ó¸®ÇÒ ¶§, OnKeyDown message¸¦ ÁÖ·Î »ç¿ëÇÏÁö¸¸
OnKeyDown messageÀÇ °æ¿ì View Ŭ·¡½º¿¡ ¿ì¼±±ÇÀÌ Àֱ⠶§¹®¿¡ MainFrame Ŭ·¡½º µî¿¡¼ »ç¿ëÇÏ·ÁÇÒ ¶§ ¿øÇϴ´ë·Î »ç¿ëµÇÁö ¾Ê´Â °æ¿ì¿¡ PreTranslateMessage¸¦ »ç¿ëÇÑ´Ù.
- »ç¿ëÇü½Ä
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: ¿©±â¿¡ Ư¼öÈµÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù.
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_SPACE)
...
}
return CFrameWnd:
:PreTranslateMessage(pMsg);
}
4.7.2 (MFC) ´ÙÀ̾ó·Î±×¿¡¼ Enter³ª ESC Ű ¸·±â #
-. MFC¿¡¼ ´ëÈ »óÀÚ ±â¹ÝÀ¸·Î ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¾î¼ ½ÇÇà½Ã۸é, ±× ´ÙÀ̾ó·Î±×¿¡¼ Enter³ª ESC ۸¦ ´©¸£¸é ´ÙÀ̾ó·Î±×°¡ Á¾·áÇϴµ¥, À̰ÍÀ» ¸·±â À§ÇØ
PreTranslateMessage¸¦ Ȱ¿ëÇÑ´Ù.
¢¹ ***Dlg.h¿¡¼
class
CTestDlg : public
CDialog
{
// »ý¼º
public:
CTestDlg (
CWnd* pParent = NULL); // Ç¥ÁØ »ý¼ºÀÚ
virtual BOOL PreTranslateMessage (MSG* pMsg);
// ´ëÈ »óÀÚ µ¥ÀÌÅÍ
enum {IDD = IDD_TEST_DIALOG };
Protected:
virtuala void
DoDataExchange(
CDataExchange* pDX); // DDX/ DDV Áö¿ø
// ±¸Çö
protected:
HICON m_hIcon;
// »ý¼ºµÈ ¸Þ½ÃÁö ¸Ê ÇÔ¼ö
virtual BOOL
OnInitDialog();
afx_msg void
OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void
OnPaint();
afx_msg HCURSOR
OnQueryDragIcon();
DECLARE_MESSAGE_MAP();
public:
afx_msg void
OnBnClickedOk();
};
¢¹ ***Dlg.cppÆÄÀÏ¿¡¼
BOOL
CTestDlg ::
PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->message)
{
// ۰¡ ´·ÈÀ»¶§
case WM_KEYDOWN:
switch(pMsg->wParam)
{
// ¸®ÅÏŰ\tab
case VK_RETURN:
return TRUE;
// ESCŰ
case VK_ESCAPE:
return TRUE;
}
}
return CDialog:
:PreTranslateMessage(pMsg);
}
5 API ÇÔ¼ö #
5.1 AllocConsole(); API ¿¡¼ Console âÀ¸·Î º¯¼ö Ãâ·Â ÇÏ´Â ¹æ¹ý #
@ 2010-12-27 @
Visual Studio ToolÀ» »ç¿ëÇØ¼ Windows ÇÁ·Î±×·¥À» ÇÏ´Ùº¸¸é µð¹ö±ë ÇÒ ¶§ ¾î·Á¿òÀ» ´À³¢°ï ÇÑ´Ù. Message󸮷Πµ¿ÀÛ Çϱ⠶§¹®¿¡ ÇÔ¼öÀÇ Æ¯Á¤ ºÎºÐÀÇ º¯¼öÀÇ °ªµîÀ» ÀбⰡ ¿©°£ ºÒÆíÇÑ ÀÏÀÌ ¾Æ´Ï´Ù.
ÀÌ·²¶§ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇϸé ÄܼÖâ°ú À©µµ¿ìÁî âÀÌ ÇÔ²² ¶ß±â ¶§¹®¿¡ ¿©·¯ º¯¼ö ¸íÀ» ¹Ù·Î¹Ù·Î Á÷Á¢ ÀÐ¾î º¼¼ö°¡ ÀÖ´Ù.
Çì´õ¿¡ ´ÙÀ½À» Ãß°¡ Çϰí
#include <stdio.h>
WinMain ù° ÁÙ¿¡ ¾Æ·¡¿Í °°ÀÌ Ãß°¡
AllocConsole();
freopen("CONOUT$", "wt", stdout);
±×·¯¸é printf() ÇÔ¼ö¸¦ ÄÚµå ³»¿¡¼ »ç¿ë °¡´ÉÇÏ´Ù.
5.2 CreateEvent() #
@ 2010-04-12 @ À̸§ÀÌ Á¤ÇØÁø ¶Ç´Â À̸§ÀÌ ¾ø´Â À̺¥Æ® °´Ã¼¸¦ ¿°Å³ª »ý¼ºÇÏ´Â ÇÔ¼ö
API_CreateEvent()
5.3 GetLastError() #
@ 2010-04-09 @ Ãâó ;
http://infoki.net/586
GetLastError
È£ÃâÃø ½º·¿µå°¡ °¡Áö´Â ÃÖ½ÅÀÇ ¿¡·¯ Äڵ带 ÃëµæÇÕ´Ï´Ù.¿¡·¯ ÄÚµå´Â ½º·¿µå ¸¶´Ù º¸°ü À¯ÁöµÇ±â À§ÇØ, º¹¼öÀÇ ½º·¿µå°¡ ¼·ÎÀÇ ¿¡·¯ Äڵ带 µ¡¾²±âÇÒ °ÍÀº ¾ø½À´Ï´Ù.
DWORD
GetLastError(void);
KERNEL32.DLL
Àμö ; Àμö´Â ¾ø½À´Ï´Ù.
¹Ýȯ°ª ; È£ÃâÃø ½º·¿µå°¡ °¡Áö´Â ÃÖ½ÅÀÇ ¿¡·¯ Äڵ带 µ¹·ÁÁÝ´Ï´Ù.
ÇØ¼³ ;
FormatMessageÇÔ¼ö·ÎFORMAT_MESSAGE_FROM_SYSTEMÇ÷¡±×¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ¸·Î, ¿¡·¯ Äڵ忡 ´ëÀÀÇÏ´Â ¿¡·¯ ¹®ÀÚ¿À» ÃëµæÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿¡·¯ ÄÚµå´Â32ºñƮġÀÔ´Ï´Ù(ºñÆ®31ÇÏÁö¸¸ ÃÖ»óÀ§ºñÆ®).ºñÆ®29(Àº)´Â ¾îÇø®ÄÉÀÌ¼Ç Á¤ÀÇÀÇ ¿¡·¯ ÄÚµå¿ëÀ¸·Î ¿¹¾àµÇ°í ÀÖ½À´Ï´Ù.¾îÇø®ÄÉÀÌ¼Ç µ¶ÀÚÀûÀÎ ¿¡·¯ Äڵ带 Á¤ÀÇÇÏ´Â °æ¿ì´Â, ÀÌ ºñÆ®¸¦ ¼¼Æ® Çϰí, ½Ã½ºÅÛ Á¤ÀÇÀÇ ¿¡·¯ ÄÚµå¿Í Ãæµ¹ÇÏÁö ¾Ê°Ô ÇØ ÁÖ¼¼¿ä.
´ëÀÀ Á¤º¸ ; Windows 95 ÀÌÈÄ / Windows NT 3.1 ÀÌÈÄ
5.4 ShellExecuteEx(A) #
@ 2010-04-09 @ Ãâó ;
http://infoki.net/586
ShellExecuteEx(A)
»õ·Î¿î ÇÁ·Î¼¼½º¸¦ ±âµ¿ÇÕ´Ï´Ù.Æú´õ¸¦ ÀͽºÇ÷η¯·Î ¿¸®°Å³ª ¹®¼ ÆÄÀÏÀ» °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ¾îÇø®ÄÉÀ̼ÇÀ¸·Î ¿¸®°Å³ª ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
BOOL
ShellExecuteExA(
LPSHELLEXECUTEINFO pExecInfo // SHELLEXECUTEINFO±¸Á¶Ã¼
);
SHELL32.DLL
Àμö ; pExecInfo
½ÇÇàµÇ´Â ¾îÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ Á¤º¸¸¦ °Ý³³Çß´Ù SHELLEXECUTEINFO ±¸Á¶Ã¼ÀÇ ÁÖ¼Ò¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
¹Ýȯ°ª ; ¼º°øÇϸé 0 ÀÌ¿ÜÀÇ °ªÀÌ µ¹¾Æ°©´Ï´Ù.
½ÇÆÐÇϸé 0 ÇÏÁö¸¸ µ¹¾Æ°©´Ï´Ù.È®Àå ¿¡·¯ Á¤º¸¸¦ ÃëµæÇÏ·Á¸é ,
GetLastError ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
ÇØ¼³ ; ÇÔ¼öÀÇ È£ÃâÀÌ ¼º°øÇϸé, SHELLEXECUTEINFO ±¸Á¶Ã¼ÀÇ hInstApp ¸â¹ö´Â ½ÇÇàµÈ ¾îÇø®ÄÉÀ̼ÇÀÇ ÀνºÅϽº ÇÚµéÀÌ µË´Ï´Ù.ÇÔ¼ö°¡ ½ÇÆÐÇßÀ» °æ¿ì´Â 32 ÀÌÇÏÀÇ SE_ERR_ ¿¡·¯Ä¡°¡ µË´Ï´Ù.ÀÌ ¿¡·¯Ä¡´Â
ShellExecute ÇÔ¼ö¿Í ȣȯÀÇ °ÍÀÔ´Ï´Ù.
ShellExecuteEx ÇÔ¼ö·Î ¿¡·¯Ä¡¸¦ ¾ò±â À§Çؼ´Â
GetLastError ÇÔ¼ö¸¦ »ç¿ëÇϵµ·Ï ÇØ ÁÖ¼¼¿ä.
GetLastError ÇÔ¼ö´Â ÀÌÇÏÀÇ ¸î°³ÀÇ °ªÀ» µ¹·ÁÁÝ´Ï´Ù.ÀÌ·¯ÇÑ °ªÀº SE_ERR_ °ª¿¡ ´ëÀÀÇϰí ÀÖ½À´Ï´Ù.
Ä¡ | ÀÇ¹Ì |
2 (ERROR_FILE_NOT_FOUND) | ÁöÁ¤µÈ ÆÄÀÏÀÌ ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù. |
3 (ERROR_PATH_NOT_FOUND) | ÁöÁ¤µÈ ÆÐ½º°¡ ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù. |
5 (ERROR_ACCESS_DENIED) | ÁöÁ¤µÈ ÆÄÀÏ¿¡ÀÇ ¾×¼¼½º´Â °ÅºÎµÇ¾ú½À´Ï´Ù. |
8 (ERROR_NOT_ENOUGH_MEMORY) | ¸Þ¸ð¸®°¡ ºÎÁ·Çϱ⠶§¹®¿¡ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù. |
32 (ERROR_SHARING_VIOLATION) | °øÀ¯ À§¹ÝÀÌ ¹ß»ýÇß½À´Ï´Ù. |
1155 (ERROR_NO_ASSOCIATION) | ÁÖ¾îÁø ÆÄÀϸíÀÇ È®ÀåÀÚ(extension)¿Í °ü·ÃÁöÀ» ¼ö ÀÖ¾ú´ø ¾îÇø®ÄÉÀ̼ÇÀÌ ¾ø½À´Ï´Ù. |
1156 (ERROR_DDE_FAIL) | DDE Æ®·£Àè¼Ç(transaction)°¡ ½ÇÆÐÇß½À´Ï´Ù. |
1157 (ERROR_DLL_NOT_FOUND) | ¾îÇø®ÄÉÀ̼ÇÀÇ ½ÇÇà¿¡ ÇÊ¿äÇÑ DLL ÀÇ1°³°¡ ¹ß°ßµÇÁö ¾Ê½À´Ï´Ù. |
1223 (ERROR_CANCELLED) | ÇÔ¼ö´Â À¯Àú¿¡°Ô Ãß°¡ Á¤º¸¸¦ ÀçÃËÇß½À´Ï´Ù¸¸, À¯Àú°¡ ¿ä±¸¸¦ ĵ½½Çß½À´Ï´Ù. |
´ëÀÀ Á¤º¸ ; Shell32.dll Version 4.00 ÀÌÈÄ
Windows 95 ÀÌÈÄ / Windows NT 4.0 ÀÌÈÄ
6 MFCÀÇ ±¸¼º #
*
Application Frameworks(AFS)
*
AFX Ŭ·¡½ºÀÇ »ó¼Ó °ü°è
*
AppWizard
ÇÁ·Î±×·¥À» »õ·Î ¸¸µé ¶§´Â
AppWizard¸¦ »ç¿ëÇϴµ¥,
AppWizardÀÇ ¿ªÇÒÀº MFCÀÇ AFXŬ·¡½º¿¡¼ »ó¼ÓÀ» ¹Þ¾Æ, ¾Æ·¡ ±×¸²¿¡¼¿Í °°Àº ³× °³ÀÇ Å¬·¡½º¸¦ »ý¼º½ÃÄÑ ÁÖ´Â °ÍÀÌ´Ù.
*
AFX Ŭ·¡½ºµé °£ÀÇ »óÈ£ÂüÁ¶ °ü°è

- µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡¼ ºä/ ÇÁ·¹ÀÓ À©µµ¿ì ÂüÁ¶
CDocument:
:GetFirstViewPosition,
GetNextView - ÇϳªÀÇ µµÅ¥¸ÕÆ®´Â ¿©·¯ °³ÀÇ ºä¿Í °áÇÕµÉ ¼ö Àֱ⠶§¹®¿¡ µµÅ¥¸ÕÆ®¿¡¼ ±×¿Í ¿¬°áµÈ ºä¸¦ ¾òÀ» ¶§´Â ¸î ¹øÂ°·Î ¿¬°áµÈ ºä¸¦ ¾òÀ» °ÍÀÎÁöµµ »ý°¢ÇØ¾ß ÇÑ´Ù.
CWnd *
AfxGetMainWnd();
¸Þ¸ðÀåÀ¸·Î °¡±â