블로그 이미지
평강왕자

카테고리

분류 전체보기 (35)
Programming Lv1 (32)
Programming LV2 (0)
취미 (3)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

MDI를 사용하면 다른 창에서 다른창을 호출해야 하는경우가 생긴다.
그경우 창을 구분해야 하는데.. 활성창을 가져오는건 함수가 있어서 간단하다.
메인프레임에서 차일드 객체를 가져와서 활성화되어있는 창을 부르면 포인터를 넘겨준다.

//메인프레임
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
//차일드 프레임
CChildFrame *pChild = (CChildFrame*)pFrame->GetActiveFrame();
//활설화 View
CPerformanceMonitoringOneViewView *pView = (CPerformanceMonitoringOneViewView*)pChild->GetActiveView();

창이 여러개일경우 활성창이 아닌 다른창을 가져오는경우는 조금 다르다.
App 에서 Doc를 호출하여 현재 View의 목록을 가져와서 호출한다.

CWinApp* pApp = AfxGetApp();
POSITION posTemplate;
posTemplate = pApp->GetFirstDocTemplatePosition();
while(posTemplate)
{
 CDocTemplate* pDocTemplate;
 pDocTemplate = pApp->GetNextDocTemplate(posTemplate);
 POSITION posDoc = pDocTemplate->GetFirstDocPosition();
 while(posDoc)
 {
  CTestDoc* pDoc2 = (CTestDoc*)pDocTemplate->GetNextDoc(posDoc);
  POSITION posView = pDoc2->GetFirstViewPosition();
  while(posView)
  {
   CTestView* pView = (CTestView*)pDoc2->GetNextView(posView);
   pView->m_graphDlg->Test();
  }
 }
}
Posted by 평강왕자
, |

MFC MDI에 새창열기를 하면 OnFileNew 함수를 호출하여 새창을 연다.

ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)

이부분을 약간 수정하여 원하는 함수를 호출하여 원하는데로 변경이 가능하다.

ON_COMMAND(ID_FILE_NEW, &CTestApp::CreateWindowGraph)

이런식으로 App안에 CreateWindowGraph라는 함수를 생성후 호출하여 변경하면 된다.

Posted by 평강왕자
, |

Pane 이용시 닫기 버튼을 없애거나 스타일을 바꿔야 하는경우가 생긴다.
그런경우 실제로 스타일변경을 해봐도 잘 되지 않거나 처음에만 적용되고 다시 실행할경우 적용이 되지 않는 경우가 있는데..
레지스트리에 CDockingManager의 내용을 저장하기 때문인거 같다..

//탭패널 생성
CTabbedPane* pTabbedPane = new CTabbedPane(TRUE);

 if(!pTabbedPane->Create(_T(""),this,CRect(0,0,255,100),TRUE,(UINT)-1, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE))
 {
  return -1;
 }

//패널 생성
m_networkManagerPane.Create(_T("NetworkManagerBar"),this,CRect(0,0,100,50),TRUE,1235, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP | CBRS_FLOAT_MULTI, AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE);

위코드는 닫기버튼을 적용시키지 않은 경우이다.
AFX_CBRS_REGULAR_TABS, AFX_CBRS_FLOAT | AFX_CBRS_RESIZE | AFX_CBRS_AUTOHIDE 이부분에 AFX_CBRS_CLOSE 추가되면 닫기 버튼이 생성된다.

이렇게 한후 실행하면 한번만 적용되고 차후 실행하면 적용이 되지 않는다.

regedit에 HKEY_CURRENT_USER -> Software -> 로컬 응용 프로그램 마법사에서 생성된 응용프로그램 항목에 보면 해당 프로젝트의 프로그램명이 보이고 Workspace -> DockingManager-128 이라는 항목을 삭제하고 시작하면 한번은 다시 적용되지만 차후 실행하면 여전히 적용이 되지 않는다.

그래서 프로그램에서 레지스트리를 초기화 시켜줘야 한다.

App 부분에 InitInstance() 함수에 프레임창을 만들기전에 레지스트리를 초기화 시켜준다.

//레지스트리 초기화
 CleanState();
// 주 MDI 프레임 창을 만듭니다.
CMainFrame* pMainFrame = new CMainFrame;
 if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
 {
  delete pMainFrame;
  return FALSE;
 }

이경우 스타일은 적용되지만 레지스트리를 초기화 했기때문에 상태바나 이런설정이 매번 다시 초기화 되니 주의해야 한다.

'Programming Lv1 > MFC' 카테고리의 다른 글

MFC MDI 창에 메세지 보내기  (0) 2011.08.16
MFC 새창열기 변경  (0) 2011.08.16
MFC 바탕화면 해상도 가져오기  (0) 2011.08.16
MFC Argument 가져오기  (0) 2011.08.16
MFC Title bar 제거  (0) 2011.08.16
Posted by 평강왕자
, |

간혹 바탕화면에 해당창의 위치를 지정해야 하는 경우가 생긴다.

그럴경우 바탕화면 해상도를 가져와서 배치해야 하는데..

int x, y;

x = (int)GetSystemMetrics(SM_CXSCREEN);
y = (int)GetSystemMetrics(SM_CYSCREEN);

각각 x축, y축 값이 변수에 저장된다.

그후 SetWindowPos(); 함수를 사용해서 배치하면 된다.

'Programming Lv1 > MFC' 카테고리의 다른 글

MFC 새창열기 변경  (0) 2011.08.16
MFC Pane 닫기버튼 미사용시 레지스트리 초기화  (1) 2011.08.16
MFC Argument 가져오기  (0) 2011.08.16
MFC Title bar 제거  (0) 2011.08.16
MFC C# DLL Form 붙이기  (0) 2011.07.21
Posted by 평강왕자
, |

Argument 는 App쪽에 m_lpCmdLine 변수에 저장된다.

CString argument = AfxGetApp()->m_lpCmdLind;
MessageBox(argument);

확인이 가능하다.
Posted by 평강왕자
, |

Dialog 기반에서 OnInitDialog() 함수 부분

//타이틀바 제거
 long style = ::GetWindowLongW(this->m_hWnd,GWL_STYLE);
 style &= ~WS_CAPTION;
 ::SetWindowLongW(this->m_hWnd,GWL_STYLE,style);

부분을 추가해주면 타이틀이 표시되지 않는다.
Posted by 평강왕자
, |

MFC에서 C#에 있는 Form을 붙여 사용해야 하는 경우가 있다.

1. MFC 프로젝트 생성
2. C# DLL 프로젝트 생성
3. MFC 프로젝트 속성 -> 공용속성 -> 새 참조 추가 -> C# DLL 프로젝트 선택
4. MFC 프로젝트 속성 -> 구성속성 -> 공용 언어 런타임 지원 -> 공용 언어 런타임 지원(/clr) 선택
5. MFC stdafx.h -> #include <afxwinforms.h> 추가
6. MFC 리소스에 넣고자하는 다이얼로그에 static 생성후 ID 변경 ex)IDC_TEST_STATIC
7. 해당 다이얼로그 헤더파일에 아래와 같은 형태로 선언해준다.
CWinFormsControl : 윈폼 컨트롤 사용 클래스
Graph : C# 프로젝트 명
UserControl1 : C# Form 명
m_Graph : 변수명

CWinFormsControl<Graph::UserControl1> m_Graph;

8. 해당 다이얼로그 cpp파일에 DoDataExchange 함수에
IDC_TEST_STATIC : static ID
m_Graph : 변수명
DDX_ManagedControl(pDX,IDC_TEST_STATIC,m_Graph);

부분추가
Posted by 평강왕자
, |

C++ 2차원 배열 선언

int data[2][3];

C# 2차원 배열 선언

int data[2,3];

C++과 다르게 ,(콤마)로 배열의 행을 구분한다.

'Programming Lv1 > C#' 카테고리의 다른 글

Monitor 사용법  (0) 2013.06.14
OpenFileDialog 파일 선택창  (0) 2013.04.10
C# partial class  (0) 2013.01.30
c# enum 사용하기  (0) 2013.01.30
C#에서 컨트롤 이동시 스크롤 위치계산하여 상위부터 표시  (0) 2011.07.21
Posted by 평강왕자
, |
컨트롤 이동시
 this.chart1.Location = new System.Drawing.Point( x , y );
이런식으로 이동하는데 스크롤을 하였을시에 이런식으로하면 혀내 화면의 좌측 꼭지점을 0,0으로 인식하여
스크롤을 위로 올리면 위에 화면이 비어버리는 현상이 발생한다.
그럴때 스크롤 값을 계산하여 이동

//세로 스크롤의 현재 값을 가져온다.
int verticalScroll = this.VerticalScroll.Value;

//현 화면의 좌측 꼭지점이 0,0 이므로 계산한 스크롤 사이즈 만큼 - 좌표값을 주게되면 현 화면의 전체 크기의 좌표에서 부터 계산하여 이동한다.
 this.chart1.Location = new System.Drawing.Point( -verticalScroll + x , y );

'Programming Lv1 > C#' 카테고리의 다른 글

Monitor 사용법  (0) 2013.06.14
OpenFileDialog 파일 선택창  (0) 2013.04.10
C# partial class  (0) 2013.01.30
c# enum 사용하기  (0) 2013.01.30
C# 2차원 배열선언  (0) 2011.07.21
Posted by 평강왕자
, |

MFC에서 C#에 있는 함수를 호출할때 C#함수에서 받는 인자값이

public void InsertData(int dataSize, int[,] data) 이런형태일경우

int 형태는 기본 MFC의 int로 전달이 가능하지만 배열은 int data[2][3] 이런식으로 전달이 불가능하다.

array
<int, 2>^ data = gcnew array<int, 2>(3,3); 이런식으로 배열을 선언하여

//C# Graph프로젝트의 UserControl1의 Form 에 있는 Control 포인터
Graph::UserControl1^ graph_control = (Graph::UserControl1^)m_Graph.GetControl();
//InsertData 함수를 호출
graph_control->InsertData(3,data);

이런식으로 전달이 가능하다.


'Programming Lv1 > MFC' 카테고리의 다른 글

MFC 바탕화면 해상도 가져오기  (0) 2011.08.16
MFC Argument 가져오기  (0) 2011.08.16
MFC Title bar 제거  (0) 2011.08.16
MFC C# DLL Form 붙이기  (0) 2011.07.21
MFC 와 C# Dll간 연동시 Window Form 컨트롤  (0) 2011.06.29
Posted by 평강왕자
, |

최근에 달린 댓글

글 보관함