[ 新規に投稿する ]

アウトプット枠やファイルマネージャ枠へのSendMessageの返りNo.09304
こみやんま さん 21/03/09 12:30 [ コメントを投稿する ]
  にあるアウトプット枠やファイルマネージャ枠への
CommandIDを伴うSendMessageの返り値(LRESULT)の質問です。
(https://help.maruo.co.jp/hidemac/html/240_PaneDll.html)

この返り値はLRESULT(=inptr_t)に相当する値だと思うのですが
この結果は成否を示す値なり、何なりの意味のある値が返ってきますが?

アウトプット枠の方しかチェックしていませんが、
SendMessageが成否に関わらず0が返ってきてるように思えます。

上記ヘルプページの例で言えば、
loaddll "HmOutputPane.dll";
#h=dllfunc("GetWindowHandle",hidemaruhandle(0));
#ret=sendmessage(#h,0x111/*WM_COMMAND*/,1009,0);//1009=クリア

の#retは成否の結果を返していますか?(特に意味のある返り値はかえしていませんか?)

外の関数は、成功時は真、失敗時は偽の値を返すような形で整えられているので、もし0しか返していないならば整えたほうが良いようにも思えます。

[ ]
RE:09304 アウトプット枠やファイルマネージャ枠へのSendMessagNo.09305
秀丸担当 さん 21/03/09 15:37 [ コメントを投稿する ]
 
sendmessageでWM_COMMANDを送る方法は、Windowsの標準的なメッセージのWM_COMMANDと同じなので、これを処理する場合は0を返すことになっています。
サンプルで#ret=sendmessage(...);としているのは、マクロの文法として、関数を呼び出す場合は何かしら返り値を受け取る部分を書いておかないといけないためでした。

成否を返すことが必要ということでしたら、0x0111ではない別の独自メッセージの値を用意するか、新しいdllfuncの関数を増やすかになります。

成否はべつに必要でなくて、サンプルにある「#ret=」が気になるということでしたら、いまのところ方法は無いです。
メッセージボックスを出すmessage文とmessage関数があるように、sendmessae文を新しく用意するとしたら返り値の記述を無くすことができます。
ただ、パラメータ部分全体を()でくくってはいけないという文法になっています。
それもなんとかするとしたら、マクロの文法で、関数は返り値を書かなくてもいい書き方だったり、文は()でくくってもいい書き方だったりと、文法を変えることを考えることになります。
[ ]

[ 新規に投稿する ]