回答編集履歴
1
追加情報
test
CHANGED
@@ -367,3 +367,105 @@
|
|
367
367
|
...
|
368
368
|
|
369
369
|
```
|
370
|
+
|
371
|
+
|
372
|
+
|
373
|
+
----
|
374
|
+
|
375
|
+
|
376
|
+
|
377
|
+
追記:2018/11/14 17:17
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
第一引数に勝手にでっちあげたlp(NULL)を渡しているので、関数が失敗しており、必要なサイズがdwSizeに書き込まれていません。
|
382
|
+
|
383
|
+
|
384
|
+
|
385
|
+
> LPARAM lp=NULL;
|
386
|
+
|
387
|
+
> GetRawInputData((HRAWINPUT)lp, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
|
388
|
+
|
389
|
+
|
390
|
+
|
391
|
+
以下のようにすれば、より良くなるでしょう。
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
```cpp
|
396
|
+
|
397
|
+
void CMFCApplication21Dlg::OnRawInput(UINT nInputcode, HRAWINPUT hRawInput)
|
398
|
+
|
399
|
+
{
|
400
|
+
|
401
|
+
UINT dwSize = 0;
|
402
|
+
|
403
|
+
GetRawInputData(hRawInput, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
|
404
|
+
|
405
|
+
unsigned char* lpb = new unsigned char[dwSize];
|
406
|
+
|
407
|
+
if (lpb == NULL)
|
408
|
+
|
409
|
+
{
|
410
|
+
|
411
|
+
// エラー
|
412
|
+
|
413
|
+
return ;
|
414
|
+
|
415
|
+
}
|
416
|
+
|
417
|
+
if (GetRawInputData(hRawInput, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)) != dwSize)
|
418
|
+
|
419
|
+
{
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
// エラー
|
424
|
+
|
425
|
+
}
|
426
|
+
|
427
|
+
RAWINPUT* raw = (RAWINPUT*)lpb;
|
428
|
+
|
429
|
+
|
430
|
+
|
431
|
+
if (raw->header.dwType == RIM_TYPEMOUSE) {
|
432
|
+
|
433
|
+
for (int i = 0; i < 10; i++) {
|
434
|
+
|
435
|
+
if (raw->header.hDevice == deviceID[i]) {
|
436
|
+
|
437
|
+
g_mouseInfo[i] = raw->data.mouse;
|
438
|
+
|
439
|
+
g_header[i] = raw->header;
|
440
|
+
|
441
|
+
m_mouseData[i] += g_mouseInfo[i].lLastX;
|
442
|
+
|
443
|
+
}
|
444
|
+
|
445
|
+
}
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
}
|
450
|
+
|
451
|
+
|
452
|
+
|
453
|
+
delete[] lpb;
|
454
|
+
|
455
|
+
CDialogEx::OnRawInput(nInputcode, hRawInput);
|
456
|
+
|
457
|
+
}
|
458
|
+
|
459
|
+
```
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
本題とはそれますが、気になった点も挙げておきます。
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
* APIはエラー処理を正しくやりましょう。
|
468
|
+
|
469
|
+
* グローバル変数を使うのは極力やめましょう。
|
470
|
+
|
471
|
+
* '10'といったマジックナンバーを使うのはやめましょう(#defineかenumかvectorのような可変長配列を使いましょう)
|