|
BOOL WINAPI Hidemaru_GetCursorPosUnicodeFromMousePos(POINT* ppt, int* pnLine
No, int* pnColumn);
の挙動について、β8確認してみました。
・座標を指定した場合は、それに対応する行・桁
・(0/nullptr)が指定された場合は、マウスの座標に基づいた行・桁
となっており、関数動作として妥当と思います。
ありがとうございました。
■以下、テスト時に記述した適当ソース
#include <windows.h>
using namespace System;
using namespace System::Windows::Forms;
ref class TestForm : public Form {
public:
static property Form^ f;
TestForm() {
InitDll();
InitTimer();
}
private:
Timer^ t;
void InitTimer() {
t = gcnew Timer();
t->Interval = 500;
t->Tick += gcnew System::EventHandler(this, &TestForm::OnTick);
t->Start();
}
HMODULE DLL;
using PFN_F1 = BOOL(WINAPI *)(POINT* ppt, int* pnLineNo, int* pnColumn);
using PFN_F2 = BOOL(WINAPI *)(int* pnLineNo, int* pnColumn);
PFN_F1 f1;
PFN_F2 f2;
void InitDll() {
DLL = LoadLibrary(L"hidemaru.exe");
if (DLL) {
f1 = (PFN_F1)GetProcAddress(DLL, "Hidemaru_GetCursorPosUnicodeFr
omMousePos");
f2 = (PFN_F2)GetProcAddress(DLL, "Hidemaru_GetCursorPosUnicode");
}
}
void OnTick(Object^ o, EventArgs^ e) {
// マウスベース
if (f1) {
POINT ppt {0,0};
BOOL s = GetCursorPos(&ppt);
if (s) {
int iLineNo{ -1 };
int iColumn{ -1 };
{
BOOL s2 = f1(&ppt, &iLineNo, &iColumn);
System::Diagnostics::Trace::WriteLine(String::Format("■
{0},{1}, S/F:{2}\n", iLineNo, iColumn, s2));
System::Diagnostics::Trace::WriteLine(String::Format("▲
{0},{1}\n", ppt.y, ppt.x));
}
{
// 適当にずらず
ppt.x = ppt.x - 40;
ppt.y = ppt.y - 40;
BOOL s3 = f1(&ppt, &iLineNo, &iColumn);
System::Diagnostics::Trace::WriteLine(String::Format("□
{0},{1}, S/F:{2}\n", iLineNo, iColumn, s3));
System::Diagnostics::Trace::WriteLine(String::Format("△
{0},{1}\n", ppt.y, ppt.x));
}
}
}
// カーソルベース
if (f2) {
int iLineNo { -1 };
int iColumn { -1 };
bool s2 = f2(&iLineNo, &iColumn);
System::Diagnostics::Trace::WriteLine(String::Format("{0},{1}\n",
iLineNo, iColumn));
}
}
};
__declspec(dllexport) intptr_t abc() {
TestForm::f = gcnew TestForm();
return 0;
}
|
|