1. DC얻기
CClientDC dc(this);
2. Client 영역구하기
GetClientRect(&rect);
WM_SIZE 메시지발생후cx,cy 사용
3. 문자열사각형안에그리기
pDC->DrawText(문자열,사각형,Style);
Style: DT_BOTTOM - 문자열을사각형맨아래줄에배열반드시DT_SINGLELINE과함께사용
DT_CENTER - 문자열을가로중앙에배치
DT_VCENTER - 문자열을세로중앙에배치
DT_LEFT,RIGHT - 문자열을좌,우로배치
DT_SINGLELINE - 문자열을한줄로만쓴다
4. Brush 사용법
5. Pen사용법
6. 화면다시그리기
7. 메시지,함수수동으로넣기(EX)버튼클릭함수넣기
헤더파일의AFX_MSG_MAP 부분에함수를정의
EX) afx_msg void funcName();
.cpp파일의AFX_MSG 부분에메시지를추가한다
EX) ON_BN_CLICKED(ID_NAME,funcName)...
ID 등록: View 메뉴의Resource Symbol 에들어가서메뉴ID 를등록해준다..
.cpp파일의맨아래에서함수를정의한다
EX) void CClass::funcName() { ... }
8. 마우스커서바꾸기
리소스탭에서커서를그리고저장한뒤ID값은준다음
9. 색상표사용하기
10. 팝업메뉴만들기
*주의사항*
[안내]태그제한으로등록되지않습니다-OnContextMenu(CWnd* pWnd, CPoint point) //여기서point 는스크린기준이고,
11. 클라이언트 포인터를 스크린 포인터로 변경
12. 그림판기능
13. MessageBox
MB_ICONQUESTION,MB_ICONINFOMATION
14. OS 컨트롤
15. DialogBox 메시지교환
16. 자료변환
17. CEdit Class 사용하기
18. 컨트롤과자료교환
19. 상태바조작
20. 수동으로Bitmap 컨트롤사용하기
21. 응용프로그램실행하기
22. Bitmap 사용하기
23. Font 바꾸기
24. Font 만들기
LOGFONT logfont; //폰트를만든다
25. Font 만들기2
26. ComboBox 사용하기
27. Spin 사용하기
28. CTime사용하기
29. CListBox 메소드
30. 파일입출력
31. MicroSoft FlexGrid 사용하기!
32. 4대Class간참조
void CClassView::OnMenuView() //뷰클래스
CMainFrame *pMain=(CMainFrame *)AfxGetMainWnd(); //View -> MainFrm
//MainFrame 클래스
//Doc 클래스
//App 클래스
33. ToolBar 추가하기
34. ToolBar에ComboBox붙이기
itemRect.left+=5; //앞여백
35. Toolbar에수동으로넣은ComboBox 사용하기
36. UPDATE_COMMAND 사용하기
pCmdUI->Enable(TRUE); //버튼활성화
pCmdUI->SetText((bAdd)?"취소":"신규"); //버튼의text 설정
pCmdUI->SetCheck(TRUE); //버튼체크
37. 프로그램정보저장
CWinApp::GetProfileString(섹션명,항목명,기본값); // 함수를사용한다. (문자열)
CWinApp::GetProfileInt(섹션명,항목명,기본값); //불러올때사용(숫자)
CWinApp::WriteProfileString(섹션명,항목명,값); //저장할때사용(문자열)
CWinApp::WriteProfileInt(섹션명,항목명,값); //저장할때사용(숫자)
//불러올때사용할함수
void CMainFrame::ActivateFrame(int nCmdShow) //프로그램실행후프레임생성될때실행
//저장할때WM_DESTROY 메시지사용
38. 컨트롤바표시하기
CMainFrame *pMain=(CMainFrame *)GetParent(); //MainFrame 주소가져오기
pMain->ShowControlBar(&pMain->m_wndToolBar,bTool1,FALSE); //툴바를bTool2 에따라보이고감춘다
39. Window 창크기,위치정보저장하기
MainFrame 의WM_DESTROY 에
WINDOWPLACEMENT w;
this->GetWindowPlacement(&w); //윈도우의정보를저장한다.
CString strRect;
strRect.Format("%04d,%04d,%04d,%04d", //04d 는4자리확보하고남은건0으로채워라
w.rcNormalPosition.left,w.rcNormalPosition.top,
w.rcNormalPosition.right,w.rcNormalPosition.bottom); //윈도우의위치,크기확보..
BOOL bMax,bMin; //윈도우의상태를저장하기위한변수
//w.falg 는이전상태의정보를가지고잇다!!
if(w.showCmd==SW_SHOWMINIMIZED) //최소화상태
{
bMin=TRUE;
if(w.flags==0) //falg 값이0 이면이전상태가보통상태이다!!
bMax=FALSE;
else //이전상태가최대화상태
bMax=TRUE;
}
else
{
if(w.showCmd==SW_SHOWMAXIMIZED) //최대화상태
{
bMax=TRUE;
bMin=FALSE;
}
else //보통상태
{
bMax=FALSE;
bMin=FALSE;
}
}
AfxGetApp()->WriteProfileString("WinStatus","Rect",strRect);
AfxGetApp()->WriteProfileInt("WinStatus","Max",bMax);
AfxGetApp()->WriteProfileInt("WinStatus","Min",bMin);
//읽어올차례..
ActivateFrame 함수로가서
WINDOWPLACEMENT w; //윈도우의상태를저장하는구조체..
BOOL bMax,bMin; //최대,최소상태를저장할변수
CString strRect; //창크기를받아올변수
strRect=AfxGetApp()->GetProfileString("WinStatus","Rect","0000,0000,0500,0700");
bMin=AfxGetApp()->GetProfileInt("WinStatus","Min",FALSE);
bMax=AfxGetApp()->GetProfileInt("WinStatus","Max",FALSE);
int a=atoi(strRect.Left(4)); //문자열을int 로바꿔준다.
int b=atoi(strRect.Mid(5,4)); //atoi 아스키값을int형으로바꿔준다..
int c=atoi(strRect.Mid(10,4));
int d=atoi(strRect.Mid(15,4));
w.rcNormalPosition=CRect(a,b,c,d);
if(bMin)
{
w.showCmd=SW_SHOWMINIMIZED;
if(bMax)
{
w.flags=WPF_RESTORETOMAXIMIZED ;
}
else
{
w.flags=0;
}
}
else
{
if(bMax)
{
w.showCmd=SW_SHOWMAXIMIZED;
}
else
{
w.showCmd=SW_SHOWNORMAL;
}
}
this->SetWindowPlacement(&w); //설정된값으로윈도우를그리게한다..
//CFrameWnd::ActivateFrame(nCmdShow); //이건반드시주석처리한다..
40. progress Bar 쓰기
m_progress.SetRange(m_first,m_last); //Progress 범위설정하기
m_progress.SetStep(m_step); //Progress Step설정하기
//m_progress.StepIt(); //스텝만큼움직이기
//또는다음을사용한다
for(int a=m_first;a<=m_last;a+=m_step) //a가처음부터끝까지
{
m_progress.SetPos(a); // 위치를a에맞춘다
Sleep(50); //천천히움직이게한다
}
41. 파일대화상자FileDialog 사용하기
void CConDlg1::OnFileopen() //파일열기버튼
{
CFileDialog *fdlg; //파일대화상자객체생성// 포인터로만든다..
static char BASED_CODE szFilter[] = "Animate Video Files (*.avi)|*.avi|All Files (*.*)|*.*||";
//필터를만들어준다..이건할줄모름..
fdlg =new CFileDialog(TRUE, ".avi", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
//대화상자만들기..이렇게해야댄다..
if(fdlg->DoModal()==IDOK) //이제..대화상자를띠우고..
{ //OK 누르면실행될부분..
m_filename=fdlg->GetPathName(); //대화상자에서경로를받아서저장.
UpdateData(FALSE);
}
}
선생님이해준거//파일다이얼로그만들기
CFileDialog fdlg(TRUE,"avi",".avi",OFN_OEVRWRITEPROMPT,"Vidoe Files(*.avi)|*.avi|All Files(*.*)|*.*||");
42. Animate Control 사용하기
m_animate.Open(m_filename); //파일을연다
m_animate.Play(0,-1,1); //(처음프레임,마지막프레임,반복횟수)
m_animate.Stop(); //정지시키기
m_ani.SetAutoStart(TRUE); //자동으로시작한다
43. Control 의Style 바꿔주기
44. 시스템날자바꾸기버튼
//SetSystemTime(),GetSystemTime() //GMT 표준시를가져온다.
45. 시스템시간바꾸기버튼
46.시스템의드라이브문자얻기
char temp[50];
GetLogicalDriveStrings(sizeof(temp),temp);
CString str,str1;
int n=0;
while(*(temp+n)!=NULL)
{
str=temp+n;
str1+= " "+str.Left(2);
n+=4;
}
47. 현재작업경로얻기
char temp[MAX_PATH]; //MAX_PATH 는경로길이의최대를define 해놓은것.
GetCurrentDirectory(sizeof(temp),temp); // 현작업하는경로를얻어온다.(경로길이,문자형);
48. Tree Control 사용하기
HTREEITEM hmov,hmus; //핸들을받을변수이게잇어야하위디렉토리생성가능
hmov=m_tree.InsertItem("영화",TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는default
hm1=m_tree.InsertItem("외화",hmov); //hmov 아래“외화”트리생성
CImageList m_image; //그림을사용하기위한클래스다!! 알아두자..
m_tree.SetImageList(&m_image,TVSIL_NORMAL); //Tree View Style Image List => TVSIL
hmov=m_tree.InsertItem("영화",0,1,TVI_ROOT,TVI_LAST); //,TVI_ROOT,TVI_LAST는default
hmus=m_tree.InsertItem("가요",1,2); //("문자열",처음그림번호,선택시그림)
hm1=m_tree.InsertItem("외화",2,3,hmov); //그림번호는default 로0이들어간다..
49. List Control 사용하기
m_list.ModifyStyle(LVS_TYPEMASK, LVS_ICON); //리스트를큰아이콘형태로보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_SMALLICON); //리스트를작은아이콘형태로보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_LIST); //리스트를리스트형태로보인다
m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT); //리스트를자세히형태로보인다
CImageList m_treeimage; //이미지리스트
CImageList m_small, m_large;
m_large.Create(IDB_LARGE,32,0,RGB(255,255,255)); //이거는클래스에서추가해준거다
m_small.Create(IDB_SMALL,16,0,RGB(255,255,255)); (bmp ID값,
m_list.SetImageList(&m_large,LVSIL_NORMAL);
m_list.SetImageList(&m_small,LVSIL_SMALL);
CString name[]={"홍길동","진달래","한국남","개나리"};
CString tel[]={"400-3759","304-7714","505-9058","700-9898"};
CString born[]={"1980-1-1","1981-12-20","1980-05-15","1981-08-31"};
CString sex[]={"남자","여자","남자","여자"};
m_list.InsertColumn(0,"이름",LVCFMT_LEFT,70);
m_list.InsertColumn(1,"전화번호",LVCFMT_LEFT,80);
m_list.InsertColumn(2,"생일",LVCFMT_LEFT,90);
m_list.InsertColumn(3,"성별",LVCFMT_LEFT,50);
LVITEM it; //리스트구조체
char temp[100];
for(int a=0;a<4;a++)
{
int n=(sex[a]=="남자")?0:1;
m_list.InsertItem(a,name[a],n); //insert item 은행을만들고..
it.mask=LVIF_TEXT|LVIF_IMAGE; //마스크설정
it.iItem=a;
it.iSubItem=1; //열설정
strcpy(temp,tel[a]); //이거모하는거냐..
it.pszText=temp;
m_list.SetItem(&it); // setitem 열에정보를넣는다.
it.iSubItem=2; //열설정
strcpy(temp,born[a]); //이거모하는거냐..
it.pszText=temp;
m_list.SetItem(&it); // setitem 열에정보를넣는다.
it.iSubItem=3; //열설정
50. Bitmap Button 사용하기
CBitmapButton 을사용한다! CButton 에서상속받는클래스임..
m_button1.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의그림설정
m_button2.LoadBitmaps(IDB_UP,IDB_DOWN,IDB_FOCUS,IDB_DISABLE); //버튼의그림설정
51. 중복없는난수발생하기
52. 메뉴범위로사용하기
53. 한,영전환함수
54. DLL함수정의하기
엑스포트함수: extern "C" __declspec(dllexport) 리터형 함수명(매개변수,...)
1차 출처 : Tong - navy9370님의MFC통