CHrefStaticクラスについて – プログラミング – Home

CHrefStaticクラスについて
 
通知
すべてクリア

CHrefStaticクラスについて

固定ページ 1 / 2

ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

前回も同じような質問をしたんですが、
CHrefStaticクラスの利用方法がよくわかりません。

サンプルソースなどありましたら、教えて頂けないでしょうか。

CHrefStaticのインスタンスを作成して、使用するんですよね。
ウィンドウハンドルの取得でエラーになってしまってます。
※青色で下線がつくまではいってます。

よろしくお願いします。


引用解決済
トピックタグ
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

ウィンドウハンドルの取得はGetSafeHwnd()の事ですか?
ちゃんと取得出来るのですが.......
ソースなど、提示してみてはどうでしょうか?


返信引用
ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

ご返信ありがとうございます。
デバックしてみたところ、SetToolTipの呼び出しで
エラーが発生していました。

void CHrefStatic::SetToolTip(LPCTSTR lpStr)
{
m_dispToolTip = TRUE;
CWnd *pWnd = GetParent();   ←ここで、エラー
m_toolTip.Create(pWnd,TTS_ALWAYSTIP);
m_toolTip.AddTool( this, lpStr);
m_toolTip.Activate(TRUE);
}

よろしくお願いします。


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

SetToolTip() を、OnInitDialog() でやっていますか?


返信引用
ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

CDialogクラスを作成して。
以下の処理で、呼び出しています。

CAboutDlg aboutDlg;
aboutDlg.DoModal();

OnInitDialog() では、呼びだしていません。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> CDialogクラスを作成して。
> 以下の処理で、呼び出しています。
>
> CAboutDlg aboutDlg;
> aboutDlg.DoModal();

これのどこで? DoModal()の中ですか?


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

> CWnd *pWnd = GetParent();   ←ここで、エラー

このエラーは具体的にどんなエラーでしょうか?


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

あ、お昼食べてたらいっぱいレスが(^^;)

> これのどこで? DoModal()の中ですか?

『OnInitDialogではなく、DoModalでダイアログを呼び出しています』という風に勘違いされ
ているのではないでしょうか?←それは無いか
それか、コンストラクタでSetToolTipを呼び出しているとか。


返信引用
ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

説明不足ですいません。こんな感じです。
以下の記述で、SetToolTipを使うにはどうすれば
いいですか?すいません。宜しくお願いします

// testDlg.cpp : インプリメンテーション ファイル
//

#include stdafx.h
#include test.h
#include testDlg.h

#include HrefStatic.h

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// アプリケーションのバージョン情報で使われている CAboutDlg ダイアログ

class CAboutDlg : public CDialog
{
public:
CAboutDlg();

// ダイアログ データ
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
CHrefStatic m_TEST;
//}}AFX_DATA

// ClassWizard は仮想関数のオーバーライドを生成します
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV のサポー

//}}AFX_VIRTUAL

// インプリメンテーション
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
DDX_Control(pDX, IDC_TEST, m_TEST);
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// メッセージ ハンドラがありません。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDlg ダイアログ

CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
: CDialog(CTestDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTestDlg)
// メモ: この位置に ClassWizard によってメンバの初期化が追加され
ます。
//}}AFX_DATA_INIT
// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しませ
ん。
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTestDlg)
// メモ: この場所には ClassWizard によって DDX と DDV の呼び出し
が追加されます。
//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDlg メッセージ ハンドラ

BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// バージョン情報... メニュー項目をシステム メニューへ追加します。

// IDM_ABOUTBOX はコマンド メニューの範囲でなければなりません。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX,
strAboutMenu);
}
}

// このダイアログ用のアイコンを設定します。フレームワークはアプリケーション
のメイン
// ウィンドウがダイアログでない時は自動的に設定しません。
SetIcon(m_hIcon, TRUE); // 大きいアイコンを設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンを設定

// TODO: 特別な初期化を行う時はこの場所に追加してください。

return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われませ
ん。
}


返信引用
ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

記載するのを忘れていました。
バージョン情報の方で使いたいです。
お願いします。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

コンストラクタで呼び出した場合、親ウィンドウが作成されていないので今の場所でエラーが出
ますから、コンストラクタで呼び出していると思われます。

OnInitDialogでSetToolTipを呼び出せばOKですね。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

ああ!ソースが!
すみません行き違いになりました。

て、事で、CAboutDlgのOnInitDialog内で呼べばOKですね。

でも、ドコにもSetToolTipを呼び出している個所がないのに、なぜエラーが出たんでしょう
か?


返信引用
ポンタ
 ポンタ
(@ポンタ)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

CAboutDlg::CAboutDlg()にOnInitDialogをつくるんですか?
クラスウイザードではつくれないですよね。
自作ダイアログにはありますが。


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

メニューの「表示(V)→ClassWizard(W)...」でクラスウィザードダイアログを出し、
「メッセージマップ」タブを押して「クラス名(N):」コンボから「CAboutDlg」を選択、
次に「オブジェクトID(I):」リスト内の先頭にある「CAboutDlg」を選択、
次に「メッセージ(G):」リスト内の「WM_INITDIALOG」を選択、
すると「関数の追加(A)」ボタンが有効になるのでそれをクリックすれば
CAboutDlg クラスに OnInitDialog() が追加されます。


返信引用
ひろぴー
 ひろぴー
(@ひろぴー)
ゲスト
結合: 22年前
投稿: 182
 

> CAboutDlg::CAboutDlg()にOnInitDialogをつくるんですか?
CAboutDlg::CAboutDlg()はコンストラクタですので、その中には作れません。念の為。

> クラスウイザードではつくれないですよね。
いえ、クラスウィザードで作れます。
WM_INITDIALOGを選択して関数追加して下さいませ。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

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