2013-05-01 2 views
0

(예, 예 아니오, 확인 ...)와 같은 메시지 상자의 단추를 삭제하고 싶지만 닫기 단추는 삭제하지 마십시오. 매개 변수를 삭제하지 않으면이 작업을 수행 할 수있는 방법이 없습니다. 그러나 옵션 매개 변수를 메시지 상자에 추가해야하므로이 작업을 수행 할 수 없습니다.MessageBox 버튼을 제거하는 방법은 무엇입니까?

+2

하나 이상의 버튼이 필요합니다. 그것은 메시지 박스의 명세의 일부이다. 정보 메시지를 표시하고 사용자 개입없이 몇 초 후에 자동으로 닫으려는 경우 메시지 상자 외에도 다른 단순한 양식을 사용해야합니다. –

답변

2

@NDJ에 동의합니다. 가장 명확하고 간단한 해결책은 양식을 기반으로 메시지 상자를 만드는 것입니다. 실제 MessageBox를 수정하려면이 example과 같은 많은 저수준 Windows API가 필요합니다. (이 프로젝트는 버튼의 텍스트를 수정하고 있습니다.이 API를 숨기려면 추가 API가 필요하지만 MessageBox는 크기가 조정되지 않습니다.)

* API 접근 방식을 사용하지 않는 것이 좋습니다 ... 얼마나 많은 노력과 코드를 필요로하는지 보여줍니다!

6

유일한 옵션은 메시지 상자처럼 보이는 사용자 지정 양식을 만드는 것입니다.

0

닫기 버튼을 제거하려는 경우. 새로운 양식을 만들지 않으면 제거 할 수 없습니다. 당신이 그것을 해제하려는 경우. 이 링크를 아래에 복사하십시오. 메시지 상자의 닫기 버튼을 여러 번 사용하지 않도록 설정했습니다.

internal const int SC_CLOSE = 0xF060;   //close button's code in windows api 
    internal const int MF_GRAYED = 0x1;    //disabled button status (enabled = false) 
    internal const int MF_ENABLED = 0x00000000;  //enabled button status 
    internal const int MF_DISABLED = 0x00000002; //disabled button status 

    [DllImport("user32.dll")] //Importing user32.dll for calling required function 
    private static extern IntPtr GetSystemMenu(IntPtr HWNDValue, bool Revert); 

    /// HWND: An IntPtr typed handler of the related form 
    /// It is used from the Win API "user32.dll" 

    [DllImport("user32.dll")] //Importing user32.dll for calling required function again 
    private static extern int EnableMenuItem(IntPtr tMenu, int targetItem, int targetStatus); 
관련 문제