欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

將非模態(tài)對(duì)話框顯示為模態(tài)對(duì)話框_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:如何實(shí)現(xiàn)無(wú)刷新的DropdownList聯(lián)動(dòng)效果
ASP.NET給我們帶了了事件模型的編程機(jī)制,這使得我們將所有的任務(wù)都放在 服務(wù)器 上執(zhí)行哪怕是一個(gè)小小變動(dòng),其實(shí)這到不是什么問(wèn)題,可是有一點(diǎn)我們無(wú)法忍受,如果我們改變某一個(gè)輸入框中的內(nèi)容

1、意圖

有時(shí)候我們希望將非模態(tài)窗口顯示為模態(tài)窗口。比如在IE的“文件”菜單下選擇“打印”,彈出的“打印”對(duì)話框就是非模態(tài)的(也許我們不太清楚Microsoft的設(shè)計(jì)意圖,一般來(lái)說(shuō)這里的“打印”對(duì)話框應(yīng)該是模態(tài)的)。這種情況下如何將“打印”對(duì)話框顯示為模態(tài)的呢(這個(gè)對(duì)話框?qū)ξ覀儊?lái)說(shuō)是Black Box)?

2、簡(jiǎn)單實(shí)現(xiàn)

簡(jiǎn)單地說(shuō),模態(tài)窗口顯示時(shí),其父窗口是被Disable的,所以模態(tài)窗口才呈現(xiàn)“模態(tài)”,所以只要在顯示我們非模態(tài)窗口前將父窗口Disable即可實(shí)現(xiàn),如下:

以下為引用的內(nèi)容:

  ……

  AfxGetMainWnd()->EnableWindow(FALSE);//將主窗口Disable,顯示出的非模態(tài)窗口就變成模態(tài)的了

  ShowModelessWindow();

  ……



問(wèn)題在于非模態(tài)窗口顯示之后是立即返回的,那我們將父窗口Enable的代碼放在哪里呢?笨辦法是用時(shí)鐘,不斷地檢測(cè)顯示出來(lái)的非模態(tài)窗口是否已經(jīng)關(guān)閉,若關(guān)閉則將父窗口Enable。

當(dāng)然,還要更好的辦法。

3、WH_CBT Hook

WH_CBT鉤子的詳細(xì)說(shuō)明請(qǐng)參閱MSDN,我們僅僅需要知道的是在窗口創(chuàng)建、銷毀之前系統(tǒng)都會(huì)調(diào)用掛上了WH_CBT的鉤子函數(shù),這正是我們需要的。具體就是在顯示非模態(tài)窗口之前掛上我們的WH_CBT鉤子處理函數(shù),之后非模態(tài)窗口創(chuàng)建的句柄就可以在鉤子函數(shù)的nCode為HCBT_CREATEWND(創(chuàng)建窗口)時(shí)從wParam參數(shù)獲得,將其保存下來(lái),并在鉤子函數(shù)的nCode為HCBT_DESTROYWND(銷毀窗口)時(shí)與wParam參數(shù)進(jìn)行比較,如果匹配則恢復(fù)主窗口的Enable狀態(tài)。

2、實(shí)現(xiàn)

1)首先定義兩個(gè)變量,此處為全局靜態(tài)變量。

以下為引用的內(nèi)容:
  static HHOOK g_hHook = NULL;

  static HWND g_hWndDialog = NULL;//用以保存窗口句柄

2)再添加一個(gè)函數(shù)CbtProc,由于是回調(diào)函數(shù),注意要聲明為static。


static LRESULT CALLBACK CbtProc(int nCode, WPARAM wParam, LPARAM lParam);

3)掛鉤

假設(shè)下面是我們的某個(gè)瀏覽器中調(diào)用“打印”對(duì)話框的函數(shù)

以下為引用的內(nèi)容:
  void CMyHtmlView::OnFilePrint()

  {

  AfxGetMainWnd()->EnableWindow(FALSE);

  g_hWndDialog = 0; //可能多次調(diào)用,需要重置保存窗口句柄的變量

  g_hHook = SetWindowsHookEx(WH_CBT, CbtProc, NULL, GetCurrentThreadId());

  if (!g_hHook)

  {

  AfxGetMainWnd()->EnableWindow(TRUE);

  return;

  }



調(diào)用“打印”對(duì)話框

以下為引用的內(nèi)容:

  }

  LRESULT CALLBACK CMyHtmlView::CbtProc(int nCode, WPARAM wParam, LPARAM lParam)

  {

  switch (nCode)

  {

  case HCBT_CREATEWND:

  {

  HWND hWnd = (HWND)wParam;

  LPCBT_CREATEWND pcbt = (LPCBT_CREATEWND)lParam;

  LPCREATESTRUCT pcs = pcbt->lpcs;

  if ((DWORD)pcs->lpszClass == 0x00008002)//#32770,“打印”對(duì)話框類名

  {

  if ( g_hWndDialog == 0 )

  g_hWndDialog = hWnd; // 只保存一次保存“打印”窗口的句柄

  }

  break;

  }

  case HCBT_DESTROYWND:

  {

  HWND hwnd = (HWND)wParam;

  if (hwnd == g_hWndDialog)

  {

  AfxGetMainWnd()->EnableWindow(TRUE);//恢復(fù)窗口狀態(tài)

  UnhookWindowsHookEx(g_hHook);//去除掛鉤

  }

  break;

  }

  }

  return CallNextHookEx(g_hHook, nCode, wParam, lParam);

  }



很簡(jiǎn)單吧,更重要的是這種方法確實(shí)有效。

分享:url傳遞中文的解決方案
1、設(shè)置web.config文件。 以下為引用的內(nèi)容: <system.web> ...... <globalization requestEncoding="gb2312" responseEncoding=&

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程