Search Results


現在使えるマルチタッチ対応 PC や同時認識点の個数、
OS 毎の各種マルチタッチ API など、調べたことを下記のページにまとめました。

Multitouch 関連情報

前回の OpenGL ES 2.0 とともにまめに更新しています。

マルチタッチと言っても 2点のみ認識可能なものが多く、3点以上取れる機種は
限られているようです。
特に 20インチ以上のタッチ対応一体型 PC の場合は、どれも同じ NextWindow の
光学式で 2点までとなっています。

ノート PC の場合は昔からある抵抗膜式をマルチタッチにしたものから、
TabletPC をマルチタッチにした 電磁誘導+静電容量 などバリエーションが豊富です。

店頭でいろいろ触ってみたところ、抵抗膜式で 5点取れる LOOX U G90、
ノートだけどペンが使えない静電容量式のみの Lenovo IdeaPad S10-3t あたりが
比較的特徴的な PC でした。

Multi touch API としてはメジャーなところで Windows 7, Android, iOS (iPhoneOS)
の 3種類試しています。


oga at 00:18
Windows7 RC と同時に WindowsSDK の RC 版も出ています。

Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: RC
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1: RC (ISO)

BETA 時点からタッチ周りの API など変更されているところがあるので要注意です。
たとえば WM_TOUCHDOWN, WM_TOUCHUP, WM_TOUCHMOVE 等は無くなり
WM_TOUCH に統一されているようです。

マニュアルも更新されています。
以前 User Interface の下にあった Touch 関連が Windows Touch
という新項目にまとめられています。このあたり力が入ってます。

MSDN Windows Touch

Direct3D11 関連も DirectX SDK March 2009 より新しいものが含まれていました。
ただし d3d11.lib などの lib 名に _beta がついていないので include の順番に
注意した方が良さそうです。
Vista で使う場合は DXSDK の方を。


関連エントリ
Windows7 Multitouch API その(2) WM_GESTURE 系
Windows7 Multitouch API
DirectX SDK March 2009


OpenGL ES 2.0 / Multitouch に続いて、立体視関連まとめ。

ステレオ 3D 開発関連 (立体視)

テストできる環境もだいぶ増えてきました。


● Windows 7

           PRIMARY
WM_TOUCH:  id3 (x,y) DOWN
WM_TOUCH:  id3 (x,y) MOVE
WM_TOUCH:  id3 (x,y) MOVE   id4 (x,y) DOWN
WM_TOUCH:  id3 (x,y) MOVE   id4 (x,y) MOVE
WM_TOUCH:  id3 (x,y) MOVE   id4 (x,y) MOVE   id5 (x,y) DOWN
WM_TOUCH:  id3 (x,y) UP     id4 (x,y) MOVE   id5 (x,y) MOVE
WM_TOUCH:                   id4 (x,y) MOVE   id5 (x,y) MOVE
WM_TOUCH:                   id4 (x,y) MOVE   id5 (x,y) UP
WM_TOUCH:                   id4 (x,y) UP


●Android 2.x 以降

         pointerIndex/pointerId (x,y)
ACTION_DOWN:  0/id0 (x,y)
ACTION_MOVE:  0/id0 (x,y)
ACTION_MOVE:  0/id0 (x,y)
ACTION_DOWN:  0/id0 (x,y)   1/id1 (x,y)                 actionPointerId=1
ACTION_MOVE:  0/id0 (x,y)   1/id1 (x,y)
ACTION_DOWN:  0/id0 (x,y)   1/id1 (x,y)   2/id2 (x,y)   actionPointerId=2
ACTION_MOVE:  0/id0 (x,y)   1/id1 (x,y)   2/id2 (x,y)
ACTION_UP:    0/id0 (x,y)   1/id1 (x,y)   2/id2 (x,y)   actionPointerId=0
ACTION_MOVE:                0/id1 (x,y)   1/id2 (x,y)
ACTION_MOVE:                0/id1 (x,y)   1/id2 (x,y)
ACTION_UP:                  0/id1 (x,y)   1/id2 (x,y)   actionPointerId=1
ACTION_UP:                  0/id1 (x,y)                 actionPointerId=0


●iOS (iPhoneOS)

touchesBegan:  (x,y)
touchesMoved:  (x,y)
touchesMoved:  (x,y)
touchesBegan:               (x,y)
touchesMoved:  (x,y)
touchesMoved:  (x,y)        (x,y)
touchesBegan:                             (x,y)
touchesMoved:  (x,y)        (x,y)         (x,y)
touchesMoved:  (x,y)        (x,y)         (x,y)
touchesEnded:  (x,y)
touchesMoved:               (x,y)         (x,y)
touchesMoved:                             (x,y)
touchesEnded:               (x,y)         (x,y)


たまに更新しています。
Multitouch 関連情報


oga at 22:09
こちらで触れたように Multitouch 周りは Windows7 ベータの時と仕様が若干
変わっています。なかなか試せず時間がたってしまいました。
ベータの WM_TOUCH

Multitouch API には 2系統あります。WM_TOUCH と WM_GESTURE です。
WM_TOUCH は複数の点の座標をそのまま送ってくるメッセージ、WM_GESTURE は
ある程度の動作を判断したあとに送られてきます。
両者は共存できないので、あらかじめどちらを使うか切り替えておくことになります。

ベータの時は WM_TOUCHDOWN, WM_TOUCHUP, WM_TOUCHMOVE と 3種類
メッセージがありました。RC 以降は WM_TOUCH 一つにまとめられています。
WM_TOUCH 系は複数のタッチ点の座標を一度に送信してくるため、それぞれ個別に
DOWN/UP する可能性があります。受け取った構造体の TOUCHINPUT には個別に
UP/DOWN/MOVE フラグが立っているので情報としては十分です。
複数の点をまとめて WM_TOUCHDOWN/TOUCHUP/TOUCHMOVE とひとくくりに
なっていたのは GESTURE のような操作を想定していたからかもしれません。

少々不思議なのは個別の UP/DOWN/MOVE は本当に区別できるのかということ。
座標はその瞬間サンプリングされたタッチ点なので厳密には個々のポイントを区別
することができず、連続性を持った値になるとは限りません。
例えば移動中のマルチタッチ点が増えたとして、どの点が新規にタッチされたものか
区別しなければならないということです。
サンプリングレートが十分速くて移動が限られている UI 操作ならそれほど問題
ないのかもしれません。
WM_TOUCH のイベントでは Windows 側で同一点の処理が行われており、
TOUCHINPUT の dwID に識別番号が入っています。
dwID が同じものを見ていくと DOWN ~ MOVE ~ UP の流れを見ることが
できるわけです。

lparam がハンドルなので、GetTouchInputInfo() で詳細を受け取ります。
これもベータ時の HANDLE から HTOUCHINPUT に変更されているようです。

void WM_Touch( UINT mes, WPARAM wparam, LPARAM lparam )
{
    int inputs= LOWORD( wparam );
    TOUCHINPUT  tbuf[ 32 ]; // inputs
    HTOUCHINPUT	hinput= reinterpret_cast( lparam );
    if( GetTouchInputInfo( hinput, inputs, tbuf, sizeof(TOUCHINPUT) ) ){
        TOUCHINPUT*  tp= tbuf;
        for( int i= 0 ; i< inputs && i < 32 ; i++, tp++ ){
            ~
	    tp->dwID // 識別
	    tp-

実際の 2点タッチだとこんな感じです。

0:(34054,41033) ID=3 flag=3a mask=4 ex=0 cx=4881 cy=5874 DOWN INRANGE PRIMARY NOCOALESCE 

0:(34054,41033) ID=3 flag=39 mask=4 ex=0 cx=4881 cy=5874 MVOE INRANGE PRIMARY NOCOALESCE 
1:(46230,31629) ID=4 flag=2a mask=4 ex=0 cx=5162 cy=5057 DOWN INRANGE NOCOALESCE 

0:(34007,40957) ID=3 flag=19 mask=4 ex=0 cx=5179 cy=5057 MVOE INRANGE PRIMARY 
1:(46224,31614) ID=4 flag=09 mask=4 ex=0 cx=4974 cy=5874 MVOE INRANGE 

0:(33966,40880) ID=3 flag=39 mask=4 ex=0 cx=5121 cy=5061 MVOE INRANGE PRIMARY NOCOALESCE 
1:(46212,31600) ID=4 flag=29 mask=4 ex=0 cx=4951 cy=5877 MVOE INRANGE NOCOALESCE 

0:(33796,40627) ID=3 flag=39 mask=4 ex=0 cx=5121 cy=5061 MVOE INRANGE PRIMARY NOCOALESCE 
1:(46330,31582) ID=4 flag=29 mask=4 ex=0 cx=4951 cy=5877 MVOE INRANGE NOCOALESCE 

0:(33632,40378) ID=3 flag=39 mask=4 ex=0 cx=4916 cy=5068 MVOE INRANGE PRIMARY NOCOALESCE 
1:(46447,31563) ID=4 flag=29 mask=4 ex=0 cx=4904 cy=5870 MVOE INRANGE NOCOALESCE 

0:(33082,39298) ID=3 flag=39 mask=4 ex=0 cx=4916 cy=5068 MVOE INRANGE PRIMARY NOCOALESCE 
1:(46757,31680) ID=4 flag=29 mask=4 ex=0 cx=4904 cy=5870 MVOE INRANGE NOCOALESCE 

0:(32531,38217) ID=3 flag=19 mask=4 ex=0 cx=3779 cy=5108 MVOE INRANGE PRIMARY 
1:(47074,31801) ID=4 flag=09 mask=4 ex=0 cx=4464 cy=5870 MVOE INRANGE 

0:(32531,38217) ID=3 flag=34 mask=4 ex=0 cx=3779 cy=5108 UP PRIMARY NOCOALESCE 
1:(47074,31801) ID=4 flag=29 mask=4 ex=0 cx=4464 cy=5870 MVOE INRANGE NOCOALESCE 

0:(47074,31801) ID=4 flag=24 mask=4 ex=0 cx=4464 cy=5870 UP NOCOALESCE 

座標値をピクセルに変換するには TOUCH_COORD_TO_PIXEL()。

HP TouchSmart IQ800 を使っていますが、たまに multi touch が無効になっている
ことがあります。何らかの更新のタイミングで、別のドライバに上書きされて
しまっているようです。ドライバを入れ直すと再び使えるようになります。

nextwindow Windows 7 Touch Screen Driver


関連エントリ
Windows SDK for Windows7 RC と Multitouch / Direct3D 11
Windows7 Multitouch API その(2) WM_GESTURE 系
Windows7 Multitouch API


oga at 00:31
Windows7 のマルチタッチ系イベントには二通りあることを前回説明しました。
高度な方、WM_GESTURE 系についてもう少し詳しくさわってみます。

メッセージは WM_MOUSEMOVE のように座標の更新毎に多数送られてきます。
このとき一つの操作の組が GID_BEGIN と GID_END で囲まれます。
例えば PAN 操作の場合

GID_BEGIN
GID_PAN
GID_PAN
GID_PAN
GID_PAN
...
GID_END

といった感じに。
また別の操作が認識されれば、それらが GID_BEGIN~GID_END で囲まれます。
マウスでいえば LBUTTONDOWN / LBUTTONUP のようなもの。
タッチだと WM_TOUCHDOWN / WM_TOUCHUP でしょう。
開始と終了が明確にわかるようになっています。

ただ上の例だと最初と最後の GID_PAN 自身にも GF_BEGIN, GF_END フラグが
追加されているので、実は GID_BEGIN/GID_END を無視しても何も困りません。
フラグ値を追加して書き直してみます。

GID_BEGIN
GID_PAN  GF_BEGIN
GID_PAN
GID_PAN
...
GID_PAN
GID_PAN  GF_INERTIA
...
GID_PAN  GF_INERTIA
GID_PAN  GF_INERTIA|GF_END
GID_END

GF_INERTIA は PAN 操作のみ追加される慣性で、操作後もしばらくメッセージが
送られてきます。

前回も書きましたがマニュアルにはまだ間違いが含まれているので、仕様が確定
するまではヘッダファイルを見た方が確実です。ヘッダは WinUser.h です。

WM_GESTURE が送ってくる座標値はスクリーン座標です。
GESTUREINFO 構造体には対象となるウィンドウのハンドルが含まれていますが、
ウィンドウ内の座標系に変換する場合は自分で行う必要があります。

一本指のシングルタッチなどはマウスと同じ扱いなので、マウス系のメッセージを
処理する必要があります。よってフリック操作はマウス扱いです。

パンや回転、ズーム(2点間の距離)などの操作は結構誤動作というかノイズが入るようです。
極端に異なる値が来たときは無視するような処理が必要になるかもしれません。
また GID_ROTATE の最初のメッセージには回転値として不正な値が入っているようです。
GID_ROTATE かつ GF_BEGIN が立っている場合、ullArguments の下位 16bit を 0 と
見なした方がよいです。
回転しようとすると必ず反転してしまうおかしな症状に最初悩みました。

用途によるとは思いますが、やはり凝ったことを行いたい場合は WM_GESTURE ではなく
WM_TOUCH 系 (WM_TOUCHUP/WM_TOUCHDOWN/WM_TOUCHMOVE) を
使った方が良さそうです。
WM_GESTURE の場合操作判定が先に行われてしまうので、操作の位置を制限することが
難しくなります。
例えば特定のオブジェクトの上だけで回転やズームを行い、それ以外の座標では
常にパン操作と判定したい場合などあまりきれいに操作を区別することができません。

最初は簡単に見えたものの、実際にやってみるとまだまだ。
プログラムの方もいろいろと工夫が必要になりそうです。


関連エントリ
Windows7 Multitouch API


oga at 00:51
先週末 LOOX U/G90 を店頭で触ってきました。
見事にマルチタッチ対応でした。

FUJITSU LOOX U

HP のデスクトップのような光学式でもなく、HP のノートのような複合型でもなく、
抵抗膜式のマルチタッチパネルだと思われます。
ペンも使えるし、WindowsMobile 端末のように表面のシートを押し込む感覚があります。

とりあえず Windows のペイント上で指 5本分 (同時に 5点) 認識していることは確認できました。
実際はもっと識別出来るかもしれませんが、画面が 5.6インチと小さいため試すのも結構
大変かもしれません。
開発機としても結構惹かれるものがあります。

キーボードは、以前購入した初代 LOOX U とは比べものにならないくらい打ちやすかったです。
QWERT の段が左にずれているのさえなければ、文字入力用途で買っていたかもしれません。

関連エントリ
Windows7 Multitouch API (3)
Windows7 とマルチタッチ / HP TouchSmart PC IQ800


oga at 23:18
Eee PC T91MT 触ってきました。
マルチタッチは同時に 2点まででした。

ASUS Eee PC T91MT

本体にスタイラスも内蔵しており、LOOX U/G90 同様に感圧式(抵抗膜?)だと思われます。
ただし LOOX U が 5点以上識別できたのに対して T91MT は 2点まででした。

その代わり液晶部を折りたたんでタブレットスタイルにすることができるし、パネルの
反応も良好でした。

HP のマルチタッチ機種と同じように、マルチタッチを使ったいくつかのアプリケーションが
搭載されており、フォトビューアなどがあります。こちら標準の Windows7 Gesture API
を使っているらしく、フリックによる切り替えや拡縮できるものの反応はワンテンポ
遅れる感じがします。操作には少々慣れが必要だと感じました。

Gesture API は簡単ですが、操作してからイベントが発生し、それから対象によって
挙動を選択しなければならないため自由度が下がります。
やはり Touch API を使った方が良いのかもしれません。

個人的には 8.9インチの小型液晶タイプが復活したことと、901 と違いキーボードの
変形がほとんど無く、均等幅だった点がポイント高いです。
web の写真はどれも英語キーボードだったので現物を見るまで確認できませんでした。

昔に比べると GMA500 のドライバも改良されていて Aero がスムーズに動くようになって
います。デフォルトは Aero の"透明感あり"で若干重かったですが許容範囲でしょう。
個人設定の画面から設定で透明感を off にすると速くなります。

ようやく Multi touch 対応 PC が増えてきました。
もう少し 3D に強い機種もあると良いのですが。


関連エントリ
LOOX U G90 と Multi Touch
Windows7 Multitouch API (3)
Windows7 とマルチタッチ / HP TouchSmart PC IQ800


oga at 22:18
タッチ関連の API は 2種類あります。
WM_TOUCH 系と WM_GESTURE 系

WM_TOUCH 系の方が低レベルで、直接複数のタッチ座標を取り出すことが出来ます。
WM_GESTURE の方はいくつかの決まった操作を容易に受け取ることができます。

WM_TOUCH 系のメッセージを有効にするには RegisterTouchWindow() を呼び出します。
これを実行しておかないと WM_TOUCH~ が送られて来ません。

データを受け取るのは簡単です。

WM_TOUCHDOWN
WM_TOUCHUP
WM_TOUCHMOVE

などマウスとよく似ているメッセージが来るので、さらに
GetTouchInputInfo() を使って詳細な情報を読み取ります。


起動時の判定

// ハードがマルチタッチをサポートしているかどうか
int  value= ~GetSystemMetrics( SM_DIGITIZER );
if( !(value & 0xc0) ){
    RegisterTouchWindow( hwnd, 0 );
}

メッセージ

    case WM_TOUCHDOWN:
    case WM_TOUCHUP:
    case WM_TOUCHMOVE:
	WM_Touch( mes, wparam, lparam );
	return	FALSE;

読み出しの例

void WM_Touch( UINT mes, WPARAM wparam, LPARAM lparam )
{
    int	inputs= LOWORD( wparam );
    TOUCHINPUT	tbuf[TOUCHMAX];
    HANDLE	hinput= reinterpret_cast<HANDLE>( lparam );
    if( GetTouchInputInfo( hinput, inputs, tbuf, sizeof(TOUCHINPUT) ) ){
	TOUCHINPUT*	tp= tbuf;
	for( int i= 0 ; i< inputs ; i++, tp++ ){
	    ...
	}
    }
    CloseTouchInputHandle( hinput );
}

座標値そのままなので、これを元にズームや回転などの操作を検出するには
さらに一手間いります。


WM_GESTURE 系はそのあたりを簡単にしてくれます。
下記の操作が定義されています。

GID_ZOOM
GID_PAN
GID_ROTATE
GID_TWOFINGERTAP
GID_ROLLOVER

これらのメッセージは RegisterTouchWindow() を実行すると来なくなるので
WM_GESTURE 系を使う場合は RegisterTouchWindow() を実行してはいけません。

WM_GESTURE が送られてきたらさらに追加情報を受け取ります。

    case WM_GESTURE:
	WM_Gesture( mes, wparam, lparam );
	return	FALSE;


void WM_Gesture( UINT mes, WPARAM wparam, LPARAM lparam )
{
    GESTUREINFO	ginfo;
    memset( &ginfo, 0, sizeof(GESTUREINFO) );
    ginfo.cbSize= sizeof(GESTUREINFO);
    HGESTUREINFO	hgesture= reinterpret_cast<HGESTUREINFO>( lparam );

    if( GetGestureInfo( hgesture, &ginfo ) ){
        ...
    }
    CloseGestureInfoHandle( hgesture );
}

WM_GESTURE 系の仕様は若干変更があったようで、資料によっては記載内容が
異なっていることがあります。例えば今でも

MSDN WM_GESTURE Message

このページにある dwCommand は存在しておらず GESTUREINFO 構造体の
dwID のことだと思われます。
同じように dwArgument も 64bit の ullArguments に変更されているようです。

・dwCommand → GESTUREINFO dwID
・dwArgument → GESTUREINFO ullArguments
・lParam → GESTUREINFO ptsLocation

その他いくつか気が付いた点。

初期状態では GID_ROTATE などのメッセージが来ませんでした。
SetGestureConfig() を使って送って欲しいメッセージの登録が出来るようです。

const int	ConfigCount= 5;
GESTURECONFIG	config[ConfigCount];
memset( config, 0, sizeof(GESTURECONFIG) * ConfigCount );

config[0].dwID= GID_ZOOM;
config[0].dwWant= GC_ZOOM;

config[1].dwID= GID_PAN;
config[1].dwWant= GC_PAN_WITH_SINGLE_FINGER_VERTICALLY
	|GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY
	|GC_PAN_WITH_GUTTER
	|GC_PAN_WITH_INERTIA;

config[2].dwID= GID_ROTATE;
config[2].dwWant= GC_ROTATE;

config[3].dwID= GID_TWOFINGERTAP;
config[3].dwWant= GC_TWOFINGERTAP;

config[4].dwID= GID_ROLLOVER;
config[4].dwWant= GC_ROLLOVER;

SetGestureConfig( hwnd, 0, 5, config, sizeof(GESTURECONFIG) );

これで全部のメッセージとオプションが有効になるはずです。

座標は ptsLocation に、追加パラメータは ullArguments に入ります。
GID_PAN + GF_INERTIA フラグが ON の場合は、ullArguments の上位 32bit に
慣性のパラメータが格納されているようです。
GID_INERTIA というのは存在していません。

なお、これらの動作を確認するには

・Windows7 Beta
・Windows SDK for Windows 7 BETA
MultiTouch 対応 PC

が必要です。Vista では起動時に DLL の互換性が無くエラーになります。
HP の TouchSmart PC IQ800 を使いました。

Windows7 SDK の設定には少々注意が必要です。
新しい DirectX SDK もリリースされているので、DirectX SDK March 2009 を
併用する場合は特に。基本的にあとからリリースされた方を上にします。

・DirectX SDK March 2009
・Windows SDK for Windows 7 BETA
・VisualStudio 2008

VisualStudio の Tools → Options → Projects and Solutions → VC++ DIrectories の設定

Include files

$(DXSDK_DIR)include
$(WindowsSdkDir)\include
$(VCInstallDir)include
~

Library files (x64)

$(DXSDK_DIR)lib\x64
$(WindowsSdkDir)lib\x64
$(VCInstallDir)lib\amd64
~

Library files (x86)

$(DXSDK_DIR)lib\x86
$(WindowsSdkDir)lib
$(VCInstallDir)lib
~

またあらかじめスタートメニュー Microsoft Windows SDK v7.0 から
Windows SDK Configuration Tool を起動して v7.0 を選択しておきます。


関連エントリ
DirectX SDK March 2009
Windows7 とマルチタッチ / HP TouchSmart PC IQ800
Direct2D と Direct3D10.1 の下位互換



oga at 23:20
SHARP メビウスのモニターに当選してしまいました。

募集がすぐ終わったとか倍率高いとか新しいセンサーを使っているとか、
ちょうどその話をしていた直後だったので目を疑いました。
なにせ「募集時点ではスペックや詳細が未発表だったので、自分はもっと小型の
デバイスを期待してた・・」とかその場で興味なさそうに発言してた本人が
当たってしまったのだから尚更です。

すでに発売されているようですが、モニター自体は来週以降なので少々待たされます。

SHARP Mebius PC-NJ70A

スペック的にはほぼ一般的な Atom N270 PC です。
特徴的なのは独自のタッチパッド。
液晶画面がついているだけでなくセンサーも兼ねた代物で、画素一つ一つが光を
読み取っているようです。
この新しいデバイス&センサーは使ってみたいところです。

もう1つ興味あるのは、タッチパッド部の液晶も結構解像度が高いこと。
854x480 ドットというと初代 EeePC 701 とほぼ同じ広さな訳ですから
この中でデスクトップやらブラウザやら普通に動かしていたことになります。
タッチパネル部のサブ画面をウィンドウズでどこまで自由に使えるかわかりませんが、
画面を広くするためのひとつの方法かもしれません。

思い返すと初めて買ったノート PC がSHARP メビウス ワイド PC-W100 でした。
メビウスワイドの画面は偶然にも同じ 1024x600 ドットです。

ネットブックが出てから 1024x600 ドットはごく普通のありふれたサイズに
なりましたが、13年前の当時は大変珍しいものだったのです。
横をのばしたというよりも 1024x768 から縦を削ってキーボードを圧迫せずに
本体サイズを小さくしようとしたもの。

当時のスペックをあらためて見ると Windows95 で RAM は 16MByte に HDD 1GByte。
CPU も Pentium 133MHz。さすがに 13年の年月を感じます。
これでも当時は DirectX3~5 を入れて Direct3D の RampDriver でプログラムを書いていました。

メビウスワイドから今まで、この間に使ってきたノート PC は
1024x600~1024x768 が圧倒的に多かったことに気がつきます。
記憶容量も演算速度もバス速度も描画速度も著しく向上しているはずなのに、
意外なほど長期間にわたって小型ノート PC の解像度が変化しませんでした。

もちろん最近は LOOX U の 1280x800 や VAIO type P の 1600x768 のように、
より詳細な液晶画面を搭載するものも出てきています。

PC-NJ70A を見て思ったのは、高解像度化に消極的なメインの液晶画面の代わりに
サブモニタを増やしてマルチ画面化するのも小型ノートパソコンの方向の 1つとして
ありなのかもしれないということ。
CPU が Multi core 化するように。

あとはサブ画面をどこまで自由に使えるか。
もしかしたら Windows SideShow でしょうか。
無理かもしれないけど理想はデスクトップの延長として使えることです。
Windows7 だと multi touch API が整備されているので、もしドライバがあるなら
すぐにでも使いたいところです。
現在 Multitouch 対応 PC として HP TouchSmart PC IQ800 を触っていますが
外周にセンサーを配置した光学式で 2点まで同時に識別することができます。
PC-NJ70A ではもっと自由に点を取れたらいいですね。

期待点まとめ
・タッチパッドとして
・画面の拡張、サブ画面として
・マルチタッチ対応センサー付きモニタとして
・別の入力手段として、位置的に親指シフトキーを配置できたりするかも


関連エントリ
Windows7 とマルチタッチ / HP TouchSmart PC IQ800


HP TouchSmart IQ800 で Multi touch を試すには Windows7 が必要ですが
ノート用 GPU を使っているせいかグラフィックドライバがうまく入らない
ことがあります。

HP TouchSmart PC IQ800

GeForce 9600M GS に対応しているはずの 186.03 もそのままでは install できません。
Vista 用ドライバも使えるので、もともと付属している純正ドライバは入れられます。
プリインストールされている Vista のドライブパーティションを残してあるなら
\hp\drivers\nVidia_Graphics がそれです。

IQ827jp の場合付属しているのは WindowsVista x86 (32bit) なので、上記ドライバも
x86 のみです。Windows7 x64 を入れる場合は使えませんでした。
HP のサイトから IQ817jp 用の Vista x64 ドライバを落とせますがこれもだめです。

Windows7 beta のときはこんな感じでドライバを入れました。

一応 186.03 も inf を書き換えれば何とかなりそうです。
もともと GeForce 9600M GS に対応していると書かれているので
inf ファイルからそれらしき記述を探します。
まず nvac.inf を調べてみます。

NVIDIA_DEV.0648.** というシンボルが 9600M GS のようです。

デバイスの ID が一致しているかどうか確認します。

デバイスマネージャー → Display adapters
   → Standard VGA Graphics Adapter → プロパティ
details タブ Hardware Ids を見ると ID がわかります。& が区切り。

VEN = 10DE
DEV= 0648
SUBSYS= 900F1043

DEV が 0648 なので上で調べたシンボルと一致しています。
対応する SUBSYS が無いためそのままインストールできなかったのだと思われます。
9600M GS 相当の定義エントリ「%NVIDIA_DEV.0648.**% = ~」の行を複製し、
「**」の番号を別の重複しない値 (今回は18) に書き換えます。
SUBSYS_ の後ろを 900F1043 に置き換えることで一応インストールできる
ようになりました。


%NVIDIA_DEV.0648.18% = Section005, PCI\VEN_10DE&DEV_0648&SUBSYS_900F1043

行を複製した部分は 3カ所です。そのうち SUBSYS を書き換えたのは 2カ所。
nvac.inf 以外にも inf ファイルは多数存在し、他にも 9600M GS の記述がみられます。
本当に nvac で良いのか根拠は全くないです。
何らかの問題が生じる可能性もあるので、もし試す場合は必ず自己責任でお願いします。
早く公式な Windows7 ドライバが出てくれると良いのですが。

Aero にするにはドライバインストール後にシステム評価の再計測が必要です。

WDDM 1.1

CPU: 6.0
RAM: 6.0
AERO: 6.3
GAME: 6.3
HDD: 5.9


関連エントリ
Windows7 Multitouch API (3)
Windows7 とマルチタッチ / HP TouchSmart PC IQ800