IUP イベント システムの理解に基本的な混乱があります。今私はマトリックスについて話している。
作成方法は次のとおりです。
Ihandle *create_mat(void)
{
mat = IupMatrix(NULL);
IupSetAttribute(mat, "READONLY", "YES");
IupSetCallback(mat, "CLICK_CB", (Icallback)click);
IupSetCallback(mat, "BUTTON_CB", (Icallback)button);
return mat;
}
コールバックは次のとおりです。
int click(Ihandle *mat, int lin, int col)
{
char* value = IupMatGetAttribute(mat, "", lin, col);
if (!value) value = "NULL";
printf("click_cb(%d, %d)\n", lin, col);
return IUP_DEFAULT;
}
int button(Ihandle *mat, int button, int pressed, int x, int y, char* status)
{
printf("button %d, %d, %d, %d %s\n", button, pressed, x, y, status);
return IUP_DEFAULT;
}
問題は、両方のコールバックをアクティブにする必要があることですが、示された状況では CLICK イベントが発生しません。
BUTTON_CB を無効にすると、CLICK イベントが発生します。しかし、クリック、左ボタンのダブルクリック、右ボタンのリリースなど、両方が必要です...
BUTTON_CB が CLICK_CB を除外するのは正常な動作ですか、それとも何か間違っていますか?
実際、CLICK_CB、ENTERITEM_CB、および lin と col を提供する LEAVEITEM_CB が利用できない場合 (記述された状況で起動されない)、行列の BUTTON_CB または WHEEL_CB ハンドラー内から "lin" と "col" を取得するにはどうすればよいですか?
さらに、フォームのレベルで使用されるイベント ハンドラーから「アクティブ コントロール」(名前、フォーカスのあるコントロールの種類) を取得するにはどうすればよいでしょうか?