アウトプット枠やファイルマネージャ枠へ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 アウトプット枠やファイルマネーNo.09305
秀丸担当 さん 21/03/09 15:37
 

sendmessageでWM_COMMANDを送る方法は、Windowsの標準的なメッセージのWM_COMMAND
と同じなので、これを処理する場合は0を返すことになっています。
サンプルで#ret=sendmessage(...);としているのは、マクロの文法として、関数を呼
び出す場合は何かしら返り値を受け取る部分を書いておかないといけないためでした。

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

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

[ ]