CreateExの使い方教えてください。 – プログラミング – Home

CreateExの使い方教えてください...
 
通知
すべてクリア

[解決済] CreateExの使い方教えてください。


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

CRichEditCtrlで複数の子ウィンドウを作成したいと思っています。
そのウィンドウは透過にしたいので、Create()ではなくCreateEx()で作成しなければなら
ないと思うのですが、うまくいきません。

VC++は初心者なので、こんな質問をして申し訳ありませんが、助けてください。

環境は、VC++6.0、MFC、WiN98です。

よろしくお願いいたします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

どううまくいきませんか?
書いたコード、出るエラー、ヘルプを見て分からない点などを教えてください。


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

dairygoodsさん早速ありがとうございます。
ヘルプや分厚い参考書を見て、いろいろ弄りまわしているため、変になってしまっています。
Create()ではできていたのですが、CreateEx()にしたら、リッチエディットコントールは作
成しているようなのですが(デバッグで確認)、左クリックをしてもカ-ソルが変わらなく、文
字入力ができません。本当に初歩の質問で申し訳ありません。
第2パラメータのWindowsのクラス名が原因かと思い、今いじくりまわしている最中です。

public:
int num;
CRichEditCtrl m_rich[10];

void CTextView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォル
トの処理を呼び出してください
CRect rect(0, 0, 0, 0);
CRect lpRect;
CHARFORMAT cf,*p;
CString winname;
winname = テキスト;
m_rich[num].CreateEx(WS_EX_TRANSPARENT, winname, NULL ,
ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN | WS_CHILD | WS_VISIBLE , rect,
this,num ) ;

// 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);
m_rich[num].GetRect(lpRect);
m_rich[num].SetWindowPos(&wndTop, point.x, point.y, lpRect.right,
lpRect.bottom, SWP_SHOWWINDOW);

num++;

CView::OnLButtonDown(nFlags, point);
}

int CTextView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください
CString winname;
num = 0;
winname = AfxRegisterWndClass(NULL,0,0,0);
CRect rect(20,20, 250, 150);

m_rich[num].CreateEx(WS_EX_TRANSPARENT, winname, NULL ,
ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN | WS_CHILD | WS_VISIBLE , rect,
this,num );

// m_rich[num].Create(ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN |
WS_CHILD | WS_VISIBLE , rect, this,num );

num++;
return 0;
}

よろしくお願いいたします。


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

CreateExの第二引数は適当では駄目です。
作りたいコントロールごとに名前が決まっています。

CreateWindowEx
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/createwindowex.asp


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

dairygoodsさんご親切にありがとうございます。やはり、第2引数がネックだったのですね。

>>作りたいコントロールごとに名前が決まっています。

リッチエディットコントロールの場合は、どんな名前なのでしょうか。
何もかもわからなくてごめんなさい。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

dairygoods さんが載せてくださったサイト(MSDN)に載っていますよ。

<MSDN>
The following predefined control classes can be specified in the lpClassName
parameter.
・・・
RichEdit
・・・
</MSDN>


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

記憶違いかもしれませんが、WS_EX_TRANSPARENTでは
うまく透過Windowが作れなかった思います。

2000以降ならLayeredWindowが使えますが、
これもトップレベルWindowにしか使えなかった気が・・・


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

第2引数は、RichEditということでしょうか?
うまくいきません。コントロールも作成していないようです。


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

いろいろと試してみました。
Create()関数で作成したウィンドウクラス名はRICHEDITでした。
それをCreateEx()関数の第2パラメータにしたのですが、作成できませんでした。
どうも、このクラス名は定義されていないようです。
しかたないので、クラス名 EDITにして作成しましたら、透過ウィンドウができました。
これから、不具合が出るかと思いますが、とりあえず、作成できたのでほっとしました。

dairygoods さん、Blueさん、Kさん本当に有難うございました。今後ともよろしくお願いいた
します。


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

クラス名は RichEdit でよいはずですが。
(大文字小文字は区別しません)

クラス名 Edit で作られるのはエディットボックスですよ。


返信引用
subaru
 subaru
(@subaru)
ゲスト
結合: 19年前
投稿: 381
 

アプリケーション起動時に
AfxInitRichEdit/AfxInitRichEdit2
を呼び出していますか?


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

dairygoods さん、ありがとうございます。

>>クラス名 Edit で作られるのはエディットボックスですよ。

そうですね。エディットコントロールです。CRichEditCtrlのメンバー関数を受け付けないで
す。
たとえば、
m_rich[num].SetSelectionCharFormat(cf);

う~ん、困りました。

subaru さん、ありがとうございます。

>>アプリケーション起動時にAfxInitRichEdit/AfxInitRichEdit2を呼び出していますか?

CRichEditCtrlクラスを使用する場合、どこで初期化すれば良いのですか?

頭痛いです。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> どこで初期化すれば良いのですか?
アプリケーションクラスのInitInstance関数内かなぁ。


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

できました。

アプリケーション起動時に
AfxInitRichEdit()で初期化したらできました。

嬉しいです。皆さんどうもありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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