>プログラムを実行させたんですが文字を表示はできたんですがスクロールバーを
>動かすと
>
>Debug Assertion failed
>program:場所
>file:afxtempl.h
>Line:262
>
>For informaition on haw your program can
>cause an assetion failure,see the visualC++
>decumentation on asserts
>とエラーが出るのですがどういったエラーなんでしょうか?
エラーはでなくなりました。
しかしスクロールバーを動かすと文字がいっぱいでてきて
おかしくなります。
SDI で作成しているアプリケーションとの事ですので CxxView で表示に関しては扱って
いる事と思いますが、 CxxView は CView 派生ですかそれとも CScrollView 派生ですか?
CScrollViewでつくりました。
CViewで同じプログラムを作成し実行させたところ
また同じ現象がでてしまいます
画面のサイズを変えるとテキストで表示した
同じものが再描画されてしまいます。
void CMyView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
// TODO: この位置にメッセージ ハンドラ用のコードを追加してください
CWnd::Invalidate(TRUE);
}
void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CWnd::Invalidate(TRUE);
}
OnRraw で領域をクリアーするとか
>void CMyView::OnSize(UINT nType, int cx, int cy)
>{
> CScrollView::OnSize(nType, cx, cy);
>
> // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
> CWnd::Invalidate(TRUE);
初心者なんでわからないんですがこれは書くのですか
それともなにか追加で表示されるものなんですか?
表示メニューのClassWizardからWM_SIZEを選びます。
たびたびすいません クラスの追加ですか?
メッセージハンドラの追加です。
向こうにも解決策をかいておいてくださいね
>void CMyView::OnSize(UINT nType, int cx, int cy)
>{
> CScrollView::OnSize(nType, cx, cy);
>
> // TODO: この位置にメッセージ ハンドラ用のコードを追加してください
> CWnd::Invalidate(TRUE);
できましたが同じ結果がでました。
とりあえず、
CArray<CRect,CRect&>& mp // 型はこれでいいのかな?
= pDoc->mp;
という風に関数の最初の方に書く(pDoc->mpの「別名」or「参照」の導入)と、
> pDoc->mp[i]=CRect(pDoc->mp[i].left,pDoc->mp[i].top-pDoc->size2[i].cy, ...
の部分を
> mp[i]=CRect(mp[i].left,mp[i].top-size2.cy, ...
という風に「pDoc->」を省いて書けるので、多少読みやすくできます。
それからCRectにはOffsetRect()というメンバ関数があり、
mp[i].OffsetRect( 0, -size.cy );
と書けばmp[i]をsize.cy分だけ上に移動できます。
皆様なんとかできました ありがとうございました。