Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


41495 / 76732 ←次へ | 前へ→

【40316】SetWindowLongPtrを使うには?
質問  mutu  - 06/7/11(火) 13:47 -

引用なし
パスワード
   ネットで情報を集めていると、

SetWindowLong(A)
この関数は SetWindowLongPtr に取って代わられています。32ビット版と64ビット版の Windows で共通して利用できるコードを記述する場合には、 SetWindowLongPtr 関数を使用する必要があります。
引用元:
http://yokohama.cool.ne.jp/chokuto/urawaza/api/SetWindowLong.html


とありましたので、SetWindowLongPtrを使うことにしました。

下記は最初に省略したAPI関数宣言部を含めたコードです。
引用元:http://park11.wakwak.com/~miko/Excel_Note/03-01_gamen.htm#03-01-01

Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Declare Function GetWindowLong Lib "user32" _
   Alias "GetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
   Alias "SetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long, _
   ByVal dwNewLong As Long) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Public Sub HideSysMenu()
 Dim Ret As Long
 Dim hWnd As Long
 Dim Wnd_STYLE As Long
 hWnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU)
 Ret = SetWindowLong(hWnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hWnd)
End Sub

Public Sub RestoreSysMenu()
 Dim Ret As Long
 Dim hWnd As Long
 Dim Wnd_STYLE As Long
 hWnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLong(hWnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE Or WS_SYSMENU
 Ret = SetWindowLong(hWnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hWnd)
End Sub


いま、このコードの
SetWindowLongとGetActiveWindowをそれぞれ
SetWindowLongPtrとGetActiveWindowPtrに代えてみたのですがうまくいきません。
どうしたらよろしいのでしょうか?
下記のコードが変更したものです。
(単純にPtrを後ろにつけてみました。)

Private Const GWL_STYLE = (-16)
Private Const WS_SYSMENU = &H80000
Private Declare Function GetWindowLongPtr Lib "user32" _
   Alias "GetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongPtr Lib "user32" _
   Alias "SetWindowLongA" _
   (ByVal hWnd As Long, _
   ByVal nIndex As Long, _
   ByVal dwNewLong As Long_PTR) As Long
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long

Public Sub HideSysMenu()
 Dim Ret As Long
 Dim hWnd As Long
 Dim Wnd_STYLE As Long
 hWnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLongPtr(hWnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE And (Not WS_SYSMENU)
 Ret = SetWindowLongPtr(hWnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hWnd)
End Sub

Public Sub RestoreSysMenu()
 Dim Ret As Long
 Dim hWnd As Long
 Dim Wnd_STYLE As Long
 hWnd = GetActiveWindow()
 Wnd_STYLE = GetWindowLongPtr(hWnd, GWL_STYLE)
 Wnd_STYLE = Wnd_STYLE Or WS_SYSMENU
 Ret = SetWindowLongPtr(hWnd, GWL_STYLE, Wnd_STYLE)
 Ret = DrawMenuBar(hWnd)
End Sub

よろしくお願いします。

0 hits

【40304】(Not WS_SYSMENU)ってどういう意味です... mutu 06/7/11(火) 10:18 質問
【40305】Re:(Not WS_SYSMENU)ってどういう意味で... Statis 06/7/11(火) 10:26 発言
【40306】Re:(Not WS_SYSMENU)ってどういう意味で... mutu 06/7/11(火) 10:35 質問
【40308】Re:(Not WS_SYSMENU)ってどういう意味で... Blue 06/7/11(火) 10:53 発言
【40310】Re:(Not WS_SYSMENU)ってどういう意味で... ひげくま 06/7/11(火) 11:02 発言
【40311】Re:(Not WS_SYSMENU)ってどういう意味で... ひげくま 06/7/11(火) 11:05 発言
【40309】Re:(Not WS_SYSMENU)ってどういう意味で... ichinose 06/7/11(火) 10:59 発言
【40314】Re:(Not WS_SYSMENU)ってどういう意味で... mutu 06/7/11(火) 12:36 お礼
【40316】SetWindowLongPtrを使うには? mutu 06/7/11(火) 13:47 質問
【40318】Re:SetWindowLongPtrを使うには? Blue 06/7/11(火) 14:00 発言
【40322】Re:SetWindowLongPtrを使うには? mutu 06/7/11(火) 15:16 質問
【40323】Re:SetWindowLongPtrを使うには? Blue 06/7/11(火) 15:22 発言
【40324】Re:SetWindowLongPtrを使うには? mutu 06/7/11(火) 16:23 お礼
【40325】Re:SetWindowLongPtrを使うには? Blue 06/7/11(火) 16:46 発言
【40330】Re:SetWindowLongPtrを使うには? mutu 06/7/11(火) 17:21 お礼

41495 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free