はじめまして、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;
(以下、追加はしていないため省略)
何故、このようなエラーが出るのか、また、エラーの意味が解りませんので
皆様の知恵をお貸しください。よろしくお願いします。
まず、メンバ変数を
CFont m_Font1;
CFont m_Font2;
で定義して・・・・。
エラーに関してですが、そこまで詳しくないのですが
Createして作成したオブジェクトに対してさらにCreateしてることが
原因です。その変数を使いたいならDeleteObjectするなり
オブジェクトの廃棄をしてからCreateしないといけません。
{
m_Font1.CreatePointFont(180, "MS ゴシック");
m_Font2.CreatePointFont(170, "MS 明朝");
}
初期化の時にフォントを作成してボタンを押したらSetFontして
使い回す方がいいと思います。
huruyaさん、ありがとうございます
指摘どおり、メンバ変数を2つにし、さらに画面の初期化時に
CreatePointFontを実行するようにしたところ、エラーは発生
しなくなりました。
ただ、
> その変数を使いたいならDeleteObjectするなり
> オブジェクトの廃棄をしてから
という指摘ですが、m_Font1.DelteObject();を画面終了時に
追加したところ、以下のエラーメッセージが表示され、ビルド
できませんでした。
error C2039: 'DelteObject' : 'CFont' のメンバではありません。
MSDNライブラリを見たところ、こちらでも記述するように書かれている
のですが、何故ビルドできないのか不明です。
いったい何が原因なのでしょうか。重ねてお願いします。
上記のエラーがそのままでているのでしたら
スペルミスかと思うのですけど・・・。
DelteObject(誤)→DeleteObject(正)
いかがでしょうか??
huruyaさん、ご指摘ありがとうございます
おっしゃるとおり、スペルミスでした。
修正したところ無事解決できました。
ツイート | ![]() |