有c的源程序,想把它封成dll,然后在c#里调用获得压力信息,求教详细方法~

amoeet 2010-11-13 09:02:13
网上找到了个数位板的源程序,可以获得笔尖压力等数据,
可是是用c编的生成的是可执行文件,
里面有一段:


LRESULT FAR PASCAL MainWndProc(hWnd, message, wParam, lParam)
HWND hWnd;
unsigned message;
WPARAM wParam;
LPARAM lParam;
{
FARPROC lpProcAbout;
static HCTX hTab = NULL;
static POINT ptOld, ptNew;
static UINT prsOld, prsNew;
static RECT rcClient;
PAINTSTRUCT psPaint;
HDC hDC;
PACKET pkt;
BOOL fHandled = TRUE;
LRESULT lResult = 0L;


switch (message) {

case WM_CREATE:
hTab = TabletInit(hWnd);
if (!hTab) {
MessageBox(NULL, " Could Not Open Tablet Context.", "WinTab",
MB_OK | MB_ICONHAND);

SendMessage(hWnd, WM_DESTROY, 0, 0L);
}
break;

case WM_SIZE:
GetClientRect(hWnd, &rcClient);
InvalidateRect(hWnd, NULL, TRUE);
break;

case WM_COMMAND:
if (GET_WM_COMMAND_ID(wParam, lParam) == IDM_ABOUT) {
lpProcAbout = MakeProcInstance(About, hInst);

DialogBox(hInst, "AboutBox", hWnd, (DLGPROC)lpProcAbout);

FreeProcInstance(lpProcAbout);
}
else
fHandled = FALSE;
break;

case WT_PACKET:
if (gpWTPacket((HCTX)lParam, wParam, &pkt)) {
if (HIWORD(pkt.pkButtons)==TBN_DOWN) {
MessageBeep(0);
}
ptOld = ptNew;
prsOld = prsNew;
ptNew.x = MulDiv((UINT)pkt.pkX, rcClient.right, 10000);
ptNew.y = MulDiv((UINT)pkt.pkY, rcClient.bottom, 10000);
prsNew = pkt.pkNormalPressure;//这个pkt.pkNormalPressure是我想要的数据
if (ptNew.x != ptOld.x ||
ptNew.y != ptOld.y ||
prsNew != prsOld) {
InvalidateRect(hWnd, NULL, TRUE);
}
}
break;

case WM_ACTIVATE:
if (GET_WM_ACTIVATE_STATE(wParam, lParam))
InvalidateRect(hWnd, NULL, TRUE);

/* if switching in the middle, disable the region */
if (hTab) {
gpWTEnable(hTab, GET_WM_ACTIVATE_STATE(wParam, lParam));
if (hTab && GET_WM_ACTIVATE_STATE(wParam, lParam))
gpWTOverlap(hTab, TRUE);
}
break;

case WM_DESTROY:
if (hTab)
gpWTClose(hTab);
PostQuitMessage(0);
break;

case WM_PAINT:
if (hDC = BeginPaint(hWnd, &psPaint)) {
POINT ptHere;

ptHere.x = ptNew.x;
ptHere.y = rcClient.bottom - ptNew.y;

/* redo horz */
Ellipse(hDC, ptHere.x - prsNew, ptHere.y - prsNew,
ptHere.x + prsNew, ptHere.y + prsNew);
PatBlt(hDC, rcClient.left, ptHere.y,
rcClient.right, 1, DSTINVERT);
/* redo vert */
PatBlt(hDC, ptHere.x, rcClient.top,
1, rcClient.bottom, DSTINVERT);

EndPaint(hWnd, &psPaint);
}
break;

default:
fHandled = FALSE;
break;
}
if (fHandled)
return (lResult);
else
return (DefWindowProc(hWnd, message, wParam, lParam));
}



里面
这个pkt.pkNormalPressure是我想要的数据,只是我不太懂c,求高手帮忙看下这个程序,教个封成dll的方法~

或者,这程序是用c调用wintab32.dll的,求教如何在c#里调用api获得pkt.pkNormalPressure的数值?

这个是源程序:
http://u.115.com/file/f56e245a3d

里面WacomEng_PC_Demos\PressureTest\PRSTEST.sln 这个项目,(想把它转成dll,里面加个读取压力的方法,然后在c#里导入调用。或者搞清楚调用api获取压力的方法,直接c#里调用api获得方法)


...全文
164 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
amoeet 2010-11-13
  • 打赏
  • 举报
回复
谢谢~我试试看~

这个是c里面的
#define PACKETDATA (PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE)

貌似就是这些值了吧~

还是这段里的
BOOL API WTClose(HCTX);
#define ORD_WTClose 22
int API WTPacketsGet(HCTX, int, LPVOID);
#define ORD_WTPacketsGet 23
BOOL API WTPacket(HCTX, UINT, LPVOID);
#define ORD_WTPacket 24
#endif

BOOL API WTPacket(HCTX, UINT, LPVOID);?
xuzysun 2010-11-13
  • 打赏
  • 举报
回复
可以在C#主程序中加入
protected override void WndProc(ref System.Windows.Forms.Message e)
用于处理WT_PACKET事件,当然需要定义WT_PACKET所对应的值!

111,089

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧