SetWindowPosでSHRT_MAX以上の位置に移動させるには

SetWindowPosではSHRT_MAX以上の位置に移動できないってエントリでとりあえずはできてたんですけども、もっと簡単な方法をみつけた。
ってか、あれは致命的な欠点があった・・。
具体的には、動かされるコントロール側でOnWindowPosChangingをオーバーロードして
そのなかでlpwndposの値をちゃんとした値に戻してあげればいい。ってだけ。

SetWindowPosからOnWindowPosChangingに来るまでの間に値がSHRT_MAXに切られてるよーだ。

なんでだろうね。

そんなわけでこんな感じに定義して

void なにか::OnWindowPosChanging(WINDOWPOS* lpwndpos)
{
// ここに来るまでの間にSHRT_MAXで切られちゃう。なぜだろう?
lpwndpos->x = m_CustomX;
lpwndpos->y = m_CustomY;
lpwndpos->cx = m_CustomCX;
lpwndpos->cy = m_CustomCY;

CDialog::OnWindowPosChanging(lpwndpos);
}

// 移動用に勝手に作った関数
BOOL なにか::SetWindowPosCustom(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy, UINT nFlags)
{
    // 保存しておく
m_CustomX = x;
m_CustomY = y;
m_CustomCX = cx;
m_CustomCY = cy;

return SetWindowPos(pWndInsertAfter, x, y, cx, cy, SWP_SHOWWINDOW | SWP_NOSIZE);
}



そんでSetWindowPosCustomで移動させればOK。
これだけでよかった。

関連記事

tag : MFC


comment

Secret

 

Ads
プロフィール

はち

はち

最新記事
最新コメント
最新トラックバック
カテゴリ
検索フォーム
RSSリンクの表示
タグクラウド
QRコード
QRコード
月別アーカイブ
カウンター