最終的には、リッチエディットコントロールに入力された、文字列矩形と同じサイズ(もしくは
やや大きい)の矩形にリッチエディットコントロールのサイズを変更したいと思っています。
デバイスコントロールの標準座標系は、MM_TEXTなので、それをMM_TWIPSに変更し、コントロー
ルないの文字列矩形の大きさもMM_TWIPSで求め、再描画したいと思っています。
下記のコードは、テスト用に
左クリックすると直前に作成したコントロールの位置を、MM_TWIPS単位で移動することができ
るかどうか作りました。しかし、どうもMM_TEXT単位のままです。
初心者のため、おかしいところもあるかと思います。遠慮なく指摘して頂きたくお願いいたしま
す。
int num = 0;
void MyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォル
トの処理を呼び出してください
CClientDC dc(this);
OnPrepareDC(&dc);
if(num > 0){
CRect recta(0, 0, 0, 0);
m_rich[num-1].GetRect(recta);
m_rich[num-1].SetWindowPos(&wndTop, recta.left+1000,
recta.top+1000, recta.right+1000,recta.bottom+1000, SWP_SHOWWINDOW);
}
m_ptPrevPos = point;
m_rich[num].Create(ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN |
WS_CHILD | WS_VISIBLE , rect, this,num );
m_rich[num].SetWindowPos(&wndTop, point.x, point.y, 400, 100,
SWP_SHOWWINDOW);
num++;
CView::OnLButtonDown(nFlags, point);
}
void MyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してくだ
さい
pDC->SetMapMode(MM_TWIPS);
CView::OnPrepareDC(pDC, pInfo);
}
環境は、VC6++,MFC,WIN98です。
マッピングモードは全てデバイスコンテキストに対する指定です。
ウィンドウの位置はデバイスコンテキストと無関係ですから,
TWIPS単位系からピクセル単位に変換してやる必要があります。
YuO、早速ご返答ありがとうございます。
TWIPS単位系からピクセル単位に変換するのは、やはり計算するしかないのでしょうか。
何か良い方法があれば教えていただけますか。
> TWIPS単位系からピクセル単位に変換するのは、やはり計算するしかないのでしょう
か。
計算するしかないのでは。
自分で計算コードを書きたくないと言う意味でしたら、
LPtoDP というものがあります。
どうもありがとうございます。
どうにか、計算で座標系を換えることができそうです。
皆さんからのご返答を自分でも調べている間に次の通知メッセージを
見つけました。
MFCではどのようにハンドラを追加していくのかわかりません。
VIEWクラスに登録されていませんし、CRichEditCtrlのクラスに追加しようとしてもそれらし
きものがありません。
リッチテキストエディットコントロール メッセージ
EN_REQUESTRESIZE
この通知メッセージを親ウィンドウに
WM_NOTIFY
の形式で送るそうです。
SDKでの書き方は、なんとなくわかるのですが、MFCではどのようにすれば良いのでしょうか。
続けてよろしくお願いいたします。
ON_NOTIFYのメッセージマップエントリの作成とハンドラ関数の作成はできました。
ありがとうございました。