在新的 Pocket PC裝置上,您會在點擊長按操作過程中實現確認操作。這是向使用者顯示您的應用程式知道進行中何種操作的一種非常好的方法。但是,當您使用 Microsoft eMbedded Visual Basic
時,沒有對點擊長按確認提供本機支援。您必須自己添加此支援。
首先,您需要捕獲發送到每個控制項的視窗訊息(最重要的是 WM_LBUTTONDOWN 訊息)。您可以通過使用像 MessageCE 這樣的第三方控制項來實現這一目的。然後,您需要使用 Windows CE API
SHRecognizeGesture。這個 API 會處理確認過程的顯示(在點擊長按操作期間以順時針方向顯示的一圈小紅點),並會返回結果代碼,用來表示使用者按住筆針的時間是否足夠長。
'讓我們看一下點擊長按確認代碼的核心部分。正如我所提到的,您需要聲明 SHRecognizeGesture 這個 API:<br />Public Declare Function SHRecognizeGesture Lib "aygshell" (ByVal SHRGINFO As String) As Long</p><p>'您還需要聲明一些 API 常量:<br />Public Const SHRG_RETURNCMD = &H1</p><p>Public Const GN_CONTEXTMENU = 1000</p><p>'下面是捕獲點擊長按操作的函數:<br />Public Function IsContextMenuGesture(ByVal hWnd As Long, ByVal X As<br />Single, ByVal Y As Single) As Boolean</p><p> Dim lsSHRGINFO As String</p><p> lsSHRGINFO = LongToBytes(20) & LongToBytes(hWnd) & _<br /> LongToBytes(X) & LongToBytes(Y) & _<br /> LongToBytes(SHRG_RETURNCMD)</p><p> IsContextMenuGesture = (GN_CONTEXTMENU = _<br /> SHRecognizeGesture(lsSHRGINFO))</p><p>End Function</p><p>'您可以看到,我正在通過向字串中新增成員值來類比一個 SHRGINFO 結構。SHRGINFO 結構如下所示:<br />typedef struct tagSHRGI {<br /> DWORD cbSize;<br /> HWND hwndClient;<br /> POINT ptDown;<br /> DWORD dwFlags;<br />} SHRGINFO, *PSHRGINFO;<br />
在類比結構(例如字串)中,我將視窗的控制代碼和座標設定為結構的相應成員。如果使用者按下筆針的時間足夠長,dwFlags 成員的 SHRG_RETURNCMD 值會通知 API 返回一個 GN_CONTEXTMENU 值。