[转载]How to hide the OK button in the dialog in .Net Compact Framework application?
Posted on 2005-07-20 12:37 被遗弃的小指 阅读(935) 评论(0) 编辑 收藏 举报Question
Some dialogs like wizards should contain neither OK nor X button. How can I the OK or X button in the dialog in .Net Compact Framework application?
Answer
A. We have to import three functions from aygshell coredll DLLs:
{
[DllImport("aygshell.dll")]
private static extern bool SHDoneButton(
IntPtr hWnd,
UInt32 dwState);
[DllImport("coredll.dll")]
public static extern UInt32 SetWindowLong(
IntPtr hWnd,
int nIndex,
UInt32 dwNewLong);
[DllImport("coredll.dll")]
public static extern UInt32 GetWindowLong(
IntPtr hWnd,
int nIndex);
}
B. Then we write 2 functions (HideDoneButton and HideXButton) and add several constants:
{
public const UInt32 SHDB_SHOW = 0x0001;
public const UInt32 SHDB_HIDE = 0x0002;
public const int GWL_STYLE = -16;
public const UInt32 WS_NONAVDONEBUTTON = 0x00010000;
public static void HideDoneButton(IntPtr hWnd)
{
SHDoneButton(hWnd, SHDB_HIDE);
}
public static void HideXButton(IntPtr hWnd)
{
UInt32 dwStyle = GetWindowLong(hWnd, GWL_STYLE);
if ((dwStyle & WS_NONAVDONEBUTTON) == 0)
SetWindowLong(hWnd, GWL_STYLE, dwStyle | WS_NONAVDONEBUTTON);
}
}
C. To hide the done (OK) button in the dialog you should add Paint event handler to the dialog and call HideDoneButton and HideXButton functions from there:
{
private void MyForm_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
WinAPI.HideDoneButton();
WinAPI.HideXButton();
}
}
If the Paint handler is not called then you should call there functions yourself from somewhere between the dialog creation and its destruction - one of the ideas is to create a timer and to call the functions from its handler.
Done!
原文地址