VC初心者です.MSFlexGridのセルに,EditBoxで直接入力を試みています.
GetCellLeft()等を使って,セル位置の数値を取得できているようなのですが,
EditBoxをその位置に出現させることができません.因みに,EditBoxの座標位置
の変更はMoveWindow()でやっています.
どなたかご存知の方,ご教授下さい.
グリッドではありませんが、リストボックスで似たようなことを
した経験があります。そのときのソースをみてみると、
CEditに対して、
MoveWindow( &r, FALSE );
SetWindowText( テキスト );
ShowWindow( SW_SHOW );
SetFocus();
SetModify( FALSE );
SetLimitText( 長さ制限 );
SetSel( 0, -1 );
てな具合に操作してました。
なので、MoveWindow()でうまくいくはずです。
実際のエディットボックスの位置と、対象となるセルの位置には
どれくらいの誤差があるのでしょうか。
座標系(スクリーン座標/クライアント座標)という観点では、間違いありませんか?
クライアント座標の場合、どのウィンドウにおける座標なのか、ということも含めて。
EIJIさん,sugarさん,早速のレスありがとうございます.
>実際のエディットボックスの位置と、対象となるセルの位置には
>どれくらいの誤差があるのでしょうか。
>座標系(スクリーン座標/クライアント座標)という観点では、間違いありませんか?
sugarさん,相当ずれるというか画面から消えてしまいます.GetCell..で得た値を15で割る
と,結構いいところにでてきます.ご指摘のように座標系に何らかの問題があると思うのです
が,勉強不足のため何をどうすればいいのかわかりません.もうちょっと勉強してみます.
以上.
こんな感じでとりあえずは適正表記できました.しかし,まだ問題はあります.MSFlexGeidの
スクロールバーを動かして,Gridの上部が画面からみえなくなったとき,Editboxがずれてしま
います.まだまだ勉強すべき課題が多いようです.
アドバイスして下さった皆さん,どうもありがとうございました.
//セルの位置(Grid の左上が 0), twips単位
long x = m_fx.GetCellLeft();
long y = m_fx.GetCellTop();
long h = m_fx.GetCellHeight();
long w = m_fx.GetCellWidth();
//1インチ当りのピクセル数
CDC* pGridDC = m_fx.GetDC();
long pixelsx = pGridDC->GetDeviceCaps(LOGPIXELSX); //横方向
long pixelsy = pGridDC->GetDeviceCaps(LOGPIXELSY); //縦方向
//セルの位置(Grid の左上が 0),pixel単位
x=x*pixelsx/1440, y=y*pixelsy/1440,
h=h*pixelsy/1440,w=w*pixelsx/1440;
m_edit.MoveWindow(x+11,y+11,w,h,true);
m_edit.SetFocus();