座標系をMM_TEXTからMM_TWIPSへ。 – プログラミング – Home

座標系をMM_TEXTからMM_TWI...
 
通知
すべてクリア

[解決済] 座標系をMM_TEXTからMM_TWIPSへ。


haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

最終的には、リッチエディットコントロールに入力された、文字列矩形と同じサイズ(もしくは
やや大きい)の矩形にリッチエディットコントロールのサイズを変更したいと思っています。

デバイスコントロールの標準座標系は、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です。


引用未解決
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

マッピングモードは全てデバイスコンテキストに対する指定です。
ウィンドウの位置はデバイスコンテキストと無関係ですから,
TWIPS単位系からピクセル単位に変換してやる必要があります。


返信引用
haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

YuO、早速ご返答ありがとうございます。
TWIPS単位系からピクセル単位に変換するのは、やはり計算するしかないのでしょうか。

何か良い方法があれば教えていただけますか。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> TWIPS単位系からピクセル単位に変換するのは、やはり計算するしかないのでしょう
か。

計算するしかないのでは。

自分で計算コードを書きたくないと言う意味でしたら、
LPtoDP というものがあります。


返信引用
haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

どうもありがとうございます。
どうにか、計算で座標系を換えることができそうです。

皆さんからのご返答を自分でも調べている間に次の通知メッセージを
見つけました。
MFCではどのようにハンドラを追加していくのかわかりません。
VIEWクラスに登録されていませんし、CRichEditCtrlのクラスに追加しようとしてもそれらし
きものがありません。

リッチテキストエディットコントロール メッセージ
    EN_REQUESTRESIZE

この通知メッセージを親ウィンドウに
WM_NOTIFY
の形式で送るそうです。

SDKでの書き方は、なんとなくわかるのですが、MFCではどのようにすれば良いのでしょうか。

続けてよろしくお願いいたします。


返信引用
haruko
 haruko
(@haruko)
ゲスト
結合: 19年前
投稿: 38
Topic starter  

ON_NOTIFYのメッセージマップエントリの作成とハンドラ関数の作成はできました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました