2012-01-12 2 views
0

네이티브 C DLL 내에서 간단한 프롬프트를 만들어야합니다. 나는 C로 창을 만들 필요가 없었으므로 어떤 가능성이 있는지 모른다.네이티브 C DLL에서 간단한 모덜리스 창을 표시하는 방법

창에는 텍스트 상자와 버튼이 있어야합니다. 사용자가 버튼을 누를 때 해당 텍스트 상자의 값을 가져올 수 있어야합니다. 표시 될 때 창은 프로그램 흐름을 방해해서는 안되며 모드가 없어야합니다. DLL 내의 코드에서 창을 닫을 수 있어야합니다.

MFC가 C++ 용임을 알기 전까지 MFC를 사용하려고 생각했습니다. 그래서 나는 래퍼를 작성한 다음 그것을 사용할 수 있다고 생각했지만, 분명히 그것이 진입 점을 변경하는 것처럼 작동 할 수 있도록 프로젝트의 일부분을 재구성해야한다. 나는 "GUI 프레임 워크"를 사용하는 방법으로 다소 혼란 스럽지만, 훌륭한 해결책이 있다면 말이야.

가능한 한 간단해야합니다.

편집 :

DLL이 우리는 응용 프로그램 제품군을위한 ...

사용되는 무엇 SCC 인터페이스를 사용하는 (난 그냥 이것을 IDE 전화 할게). 우리에게는 SVN 저장소가 있으므로 PushOk를 사용하여 IDE의 쿼리를 SVN 명령으로 변환합니다. PushOk와 IDE의 SCC 인터페이스 정의가 항상 일치하지는 않으므로 IDE가 특정 작업으로 인해 충돌합니다. 우리가 PushOk의 소스 코드를 소유하지 않았기 때문에 우리는 우리가 가지고 있던 특정 문제를 해결 한 우리 자신의 프록시 DLL을 작성했습니다.

이제 PushOk에는 개정판을 지정하는 동안 파일을 가져올 수있는 옵션이 없습니다 (우리의 경우에는 작동하지 않습니다). 그래서 우리는 그것을 우리 자신을 구현해야합니다. aformentioned 윈도우 개정판을 입력 한 다음 그 개정판으로 해당 파일을 가져올 수있는 창 것입니다.

+1

DLL에 사용자 인터페이스가 표시되지 않아야합니다. 왜 표준 응용 프로그램을 만들지 않습니까? –

+0

상황에 따라 DLL에서 창을 구현하는 것이 가장 좋습니다. 나는 별도의 응용 프로그램을 만든 다음 DLL에서 호출 할 수 있지만 다른 솔루션을 선호합니다. – SanBen

+0

"상황"에 대한 자세한 정보가 도움이 될 것입니다. DLL이 UI를 표시해야하는 상황을 상상할 수는 없습니다. –

답변

2

DLL에서 GUI 프레임 워크를 사용하지 않아야합니다. 재난을 대비하는 방법입니다. 일반 win32 API (CreateDialog() 및 친구 및 모든 잘 있어야 함)에 충실하십시오.

(해당 문구가 주석에서 복사되었으므로 자세히 설명합니다).

이 기능은 실제로 사용하기 쉬운 종료된다

  • 먼저 당신은 당신의 DLL로 컴파일 대화 자원이 필요합니다. VisualStudio 통합 리소스 편집기가 여기에 편리 할 것입니다.

  • 이어서 DLGPROC 함수

물품.

BOOL CALLBACK MyDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (msg) 
    { 
     case WM_INITDIALOG: 
      /* ... */ 
     default: 
      return FALSE; 
    } 
} 
  • 그리고 내 보낸 함수

    는 호출하고 나중에 핸들을 저장 :

합니다. 당신이 대화 상자를 파괴하려는 경우

HWND hWnd = CreateDialog(hInstance, MAKEINTRESOURCE(ID_MY_DIALOG), NULL); 
  • , 단지 전화 :

합니다.

Win32 대화 상자에 대해 알고 싶다면 here을 모두 찾으십시오.

+0

방금 ​​대화 상자를 처리 할 때 destroyWindow() 대신 EndDialog()를 사용해야한다고 읽었습니다. – SanBen

+1

@ R34lthing'EndDialog()'는 로컬 메시지 루프의 중단을 처리하기 때문에'DialogBox()'또는 유사하게 실행되는 모달 대화 상자입니다. 당신의 다이얼로그가 모덜리스라면'DestroyWindow()'를 일반 윈도우로 사용하여 파기해야합니다. Win32 대화 상자에 대해 알고 싶은 모든 것을 찾아보십시오. [여기] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632588(v= VS.85) .aspx) – rodrigo

관련 문제