フォントの変更でエラー発生

解決


Poyon  2005-04-27 19:25:34  No: 57210

はじめまして、Poyonといいます。
VC++は初心者です。
環境はWin2K  SP4、VC++6.0です。

現在、画面上のテキストプロパティ、EDITプロパティに表示している
文字のフォント、サイズを変更するプログラムを作成していますが、
実行すると以下のエラーが表示されます。
  Debug Assertion Failed!

  Program: <中略>
  File: wingdi.cpp
  Line: 1120
  
  For information on how your program can cause an assertion 
  failure, see the Visual C++ documentation on asserts.

プログラム部分は以下のようになっています
DlgTest.cpp(作成した画面です)
void CDlgTest::OnButton01()   (ボタンクリックで変更するようにしました)
{
    // テキストのフォント変更
    m_Font.CreatePointFont(180,"MS ゴシック");
    GetDlgItem(IDC_LV_TEST01)->SetFont(&m_Font);
    // EDITのフォント変更
    m_Font.CreatePointFont(170,"MS 明朝");
    GetDlgItem(IDC_EDIT01)->SetFont(&m_Font);

}

DlgTest.h
class CDlgTest : public CDialog
{
// コンストラクション
public:
    CDlgTest(CWnd* pParent = NULL);   // 標準のコンストラクタ
    CFont m_Font;
  (以下、追加はしていないため省略)

何故、このようなエラーが出るのか、また、エラーの意味が解りませんので
皆様の知恵をお貸しください。よろしくお願いします。


huruya  2005-04-27 20:51:14  No: 57211

まず、メンバ変数を
CFont m_Font1;
CFont m_Font2;
で定義して・・・・。

エラーに関してですが、そこまで詳しくないのですが
Createして作成したオブジェクトに対してさらにCreateしてることが
原因です。その変数を使いたいならDeleteObjectするなり
オブジェクトの廃棄をしてからCreateしないといけません。
{
    m_Font1.CreatePointFont(180, "MS ゴシック");
    m_Font2.CreatePointFont(170, "MS 明朝");
}
初期化の時にフォントを作成してボタンを押したらSetFontして
使い回す方がいいと思います。


Poyon  2005-04-27 22:12:49  No: 57212

huruyaさん、ありがとうございます
指摘どおり、メンバ変数を2つにし、さらに画面の初期化時に
CreatePointFontを実行するようにしたところ、エラーは発生
しなくなりました。

ただ、
> その変数を使いたいならDeleteObjectするなり
> オブジェクトの廃棄をしてから
という指摘ですが、m_Font1.DelteObject();を画面終了時に
追加したところ、以下のエラーメッセージが表示され、ビルド
できませんでした。
  error C2039: 'DelteObject' : 'CFont' のメンバではありません。
MSDNライブラリを見たところ、こちらでも記述するように書かれている
のですが、何故ビルドできないのか不明です。
いったい何が原因なのでしょうか。重ねてお願いします。


huruya  2005-04-27 22:39:11  No: 57213

上記のエラーがそのままでているのでしたら
スペルミスかと思うのですけど・・・。

DelteObject(誤)→DeleteObject(正)
いかがでしょうか??


Poyon  2005-04-27 23:25:24  No: 57214

huruyaさん、ご指摘ありがとうございます
おっしゃるとおり、スペルミスでした。
修正したところ無事解決できました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加