MFC는 윈도우즈 API와 밀접한 관계가 있습니다.

MFC에서 활용하는 기능의 바탕에는 

윈도우 API에 있기 때문입니다.


C를 공부하시고, 윈도우 API를 보시고

MFC를 공부하셔야 제대로 보이게 됩니다.


또한 도구의 사용법과 로직공부를 병행하셔야 합니다.


MFC, API를 공부하는 것은 도구의 사용법만 배우는 것입니다.

효율적인 로직을 짤 수 있도록 훈련하는 로직 공부가 필요합니다.

효과적인 로직을 짜기 위해서는 수학을 공부해야 합니다.



참고

API와 MFC를 공부하기에 앞서..

윈도우즈 API공부방법-(윈도우즈 API정복 책)

프로그래밍과 수학과의 관계는? - OKKY

Win32 API 입문 강좌 - 김상형

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

강좌를 써야 하는데.. ㅠㅠ

 

MFC가 나온지 20년이 다 되어 가지만 아직도 많은 분들이 어려워 하고 있는거 같습니다.

 

제가 생각하는 MFC 학습 방법 입니다.

 

1. 선수 과목은 C++과 API입니다. 꼭, 먼저 공부한후 MFC로 접근 하시는 것이 좋을거 같습니다.

 

2. Document/View가 MFC의 전부는 아닙니다. 시중의 모든 서적이 처음 부터 Doc/View 구조를 가지고 시작해서 그런지.. 모두 이 구조를 가지고 시작하는데.. 전 절대 반대 입니다.

 

 

3. 먼저 위저드를 사용하지 말고 다양한 형태의 MFC 모델을 만들어 보면서 MFC 구조를 파악하는 것이 좋을거 같습니다.
   
   Doc/View를 사용하지말고

   APP 만 있는 프로그램 => 그리고 Frame 추가 => 그리고 View 추가  등으로...

   일단 위저드가 생성해주는 코드를 대략적으로 이해 할수 있어야 할거 같습니다.

  

   이방식으로 학습하는게 처음에는 조금 느릴수 있지만 결국 나중에 가면 훨씬 정확하고 빠른 방법이 됩니다.

 

 

4. 다음으로는 C++ 분야에서 흔히 사용되는 디자인 기법(패턴)과 MFC 구조를 비교해 보는것도 MFC를 이해 하는데 도움이 됩니다.

   PreCreateWindow() => template method..
   
   메뉴처리순서(V=>D=>F=>A) => Chain Of Responsility

   Doc/View => Observer 등등으로 비교해 볼수 있겠군요..

   물론 전통적인 디자인 패턴과 MFC 내부 구조는 다른 점이 있지만 MFC 전체를 바라 보는 눈을 키워 줍니다.

 

 

5. Document/View의 구조의 특징과 다양한 View에 활용 기법을 익혀야 합니다.

   MFC의 내부 구조가 어느 정도 감이 잡혔다면 Doc/View구조와 다양한 View의 활용기술을 익혀야 겠지요.

 


6. 다음으로 MFC만의 여러가지 특징을 정확히 이해해야 겠군요..

 

   API핸들과 MFC객체 사이의 관계을 나타내는 FromHandle() => 정말 중요한 개념을 가진 함수 입니다. 
   RUNTIME_CLASS() 의 역활과 필요성등등..

   DECLARE_XXX()등의 역활과 언제 사용하는지도 정확히 파악하셔야 합니다.

 

 

7. 결국 API를 잘해야 합니다.
   
   MFC가 객체지향 원칙에따라 API를 잘 Wrapping 했다면 API를 몰라도 MFC만 잘하면 되지만.. 아쉽게도 MFC는 
   그리 훌륭한 설계가 되지 못해서.. 결국 API를 잘해야 합니다.

 

8. 이제는 "이런경우는 이렇게 한다." 로 수많은 경우의 예제를 잘정리 해 놓아야 할거 같군요...



출처

네이버카페 - MFC를 공부하는 방식..



저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

비주얼 스튜디오 버전 4.0 이전에, 비주얼 베이직 3, 비주얼 C++, 비주얼 폭스프로, 비주얼 소스세이프가 별도의 제품으로 있었다.

제품명코드명버전 번호cl.exe
버전
지원 닷넷
프레임워크 버전
출시일
비주얼 스튜디오 97Boston5.0빈칸빈칸1997년 02월
비주얼 스튜디오 6.0Aspen6.012.00빈칸1998년 06월
비주얼 스튜디오 .NET (2002)Rainier7.013.001.02002년 02월 13일
비주얼 스튜디오 .NET 2003Everett7.113.101.12003년 04월 24일
비주얼 스튜디오 2005Whidbey8.014.002.0, 3.02005년 11월 07일
비주얼 스튜디오 2008Orcas9.015.002.0, 3.0, 3.52007년 11월 19일
비주얼 스튜디오 2010Dev10/Rosario10.016.002.0 – 4.02010년 04월 12일
비주얼 스튜디오 2012Dev1111.017.002.0 – 4.5.22012년 09월 12일
비주얼 스튜디오 2013Dev1212.018.002.0 – 4.5.22013년 10월 17일
비주얼 스튜디오 2015Dev1414.019.002.0 – 4.62015년 07월 20일
비주얼 스튜디오 2017[4]Dev1515.019.102.0 – 4.7; 코어 1.02017년 03월 07일

C/C++ 컴파일러 cl.exe는 비주얼 스튜디오에 포함되어 있으며 _MSC_VER라는 미리 정의된 전처리기 매크로로 검사할 수 있다.



참고

마이크로소프트 비주얼 스튜디오 - 위키백과

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

C#에서는

Application.StartupPath를 사용하면 됐지만

WPF에서는  

AppDomain.CurrentDomain.BaseDirectory;

또는 

string appStartPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName);

이렇게 사용하면 된다.

출처: http://outsider14.tistory.com/entry/WPF에서-실행파일이-있는-경로 [explore_life]


추가참조

[C#] Path(경로) 가져오는 방법

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

1. OneClick

OneClick을 이용해서 배포하면 가장 간편하다고 한다.

다만 서버에 OneClick 서비스를 구축해야 한다는 단점이 있다.


서버에 최대한 손을 대지 않고 업데이트 프로그램을 만들어서 처리할 방안을

얻어야 한다.


2. 자가 업데이터

별도의 Updater.exe 을 만들어서 기존 프로그램의 exe를 교체하는 걸로 한다.

서버에 올라온 exe파일의 버전값과 기존 exe의 버전값을 비교하여

서버에 올라온 버전값이 더 높을 때만 파일을 다운받아서 기존 exe를 삭제하고

새로운 exe파일을 그 자리에 놓으면 된다.

(파일이름 변경으로 처리한다)






참고

http://adamz.tistory.com/61

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글



삭제코드 (Good Code)

listBox.Items.RemoveAt(index);



다음의 코드는 올바르게 작동하지 않는다. (bad Code)

listBox.Items.Remove(index);


저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글



각종 팝업 테스팅!



테스트 코드


MessageBox.Show("스타크래프트2(64bit) 설치 확인!", 
"스타크래프트2 설치 체크",
 MessageBoxButton.OK, MessageBoxImage.Information);


MessageBox.Show("스타크래프트2(64bit) 가 설치되지 않았습니다.!", 
"스타크래프트2 설치 체크",
 MessageBoxButton.OK, MessageBoxImage.Hand);

MessageBox.Show("스타크래프트2(64bit) 공허의유산 확장팩이 없습니다..", 
"스타크래프트2 설치 체크", 
MessageBoxButton.OK, MessageBoxImage.Warning);



저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

C#에서 postgreSQL의 Notification(알림;노티피케이션)을 사용하는 방법을 알아보겠다.

Notification은 스마트폰의 push와 비슷하다고 볼 수 있다.

다만 스마트폰처럼 상단에 수신되었다고 알려주는 것은 없고,

별도로 이벤트를 만들어서 해당 메시지를 확인하고,

필요한 작업을 해줘야 한다.


Npgsql 라이브러리(C#)를 사용하면 

응용프로그램에서 손 쉽게 DB를 호출하여

조작할 수 있다.


SyncNotification이라고 알림이 사용가능한 상태인지 알려주는 bool 값이 있다.

이게 true일 때만 Notification을 수신할 수 있다.


SyncNotificaiotn을 활성화하려면 

DB를 연결할 때, 뒤에 옵션 값으로 추가해줘야 한다.


DB 연결 스트링 (C#)

conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;" + 
"Password=my_password;Database=helper_db.psql;SyncNotification=true");


연결스트링에 위처럼 옵션을 추가하고

conn.SyncNotification 값을 확인하면

true로 리턴되는 걸 알 수 있다.



알림의 구체적인 사용법 (C#)


//DB 알림 수신 준비 : 수신할 알림의 이름을 입력한다.
string sql = "listen mynotify";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);
command.ExecuteNonQuery();

//DB 알림 이벤트 연결 
conn.Notification += OnNotification;

//postgreSQL Notification 이벤트 수신 : 이벤트 수신시 필요한 작업을 처리한다.
        public void OnNotification(object sender, NpgsqlNotificationEventArgs e)
{ 

    if (Application.Current.Dispatcher.CheckAccess())
    {
	
    }
    else
    {
	if (e.AdditionalInformation == "msg1")
	{ 
	    Console.WriteLine("event handled : " + e.AdditionalInformation);
	}
	else if (e.AdditionalInformation == "msg2")
	{
	    
	    Console.WriteLine("event handled : " + e.AdditionalInformation);
	}  
	else {

	    Console.WriteLine("event handled: " + e.AdditionalInformation);
	}
    }
}




알림의 전달 (postgreSQL)

PgAdmin 등에서 다음의 쿼리로 테스트한다.

notify mynotify, 'msg1';


모든 설정을 제대로 잡았다면

출력로그에 

event handled : msg1

라고 출력된다.



참고

NOTIFY - postgreSQL 공식 사이트

31.8. Asynchronous Notification

Npgsql - Notify

Can't immediately receive multiple notifications in Npgsql



저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글

Nuget으로 Meterial Design Themes를 설치했다.

근데 문제는 프로그램을 배포할 때 나타났다.


제대로 배포할 수 없는 문제가 발생해서

지우고 고쳐보고 별 짓을 다했지만 적당한 방법을 찾을 수

없었다.


다음의 솔루션을 적용하면

MaterialDesignTheme.Wpf.dll을 성공적으로 로드할 수 있게 된다.

배포상의 오류로 골머리를 썩었는데, 이 코드 하나로 상황이 정리 되었다.




참고

Material Design In XAML Toolkit

파일 또는 어셈블리를로드 할 수 없습니다 'MaterialDesignThemes.Wpf, PublicKeyToken = null' - Github

저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글





출처

빌드 작업(Build Action) 정리


저작자 표시 동일 조건 변경 허락
신고

설정

트랙백

댓글