キーボードでの同時押しってできるのでしょうか。
すいません
環境はWinME VC++6.0 MFC SDI
打鍵するスイッチのことを総称してキーボードという
電子オルガンの質問ならほかに行け!
>環境はWinME VC++6.0 MFC SDI
組あわせるキーの数とキーの種類を明確にしてください
通常「KEY_DOWN」というイベントが発生します
ここら辺のMSDNよく読んで見てはどうですか
画像を移動させるのにOnKeyDownをつかって
右 VK_RIGHT
左 VK_LEFT
上 VK_UP
下 VK_DOWN
にしているのですが
カーソルの右上の同時押しをすれば画像が斜めにいくようにしたいのです。
試してみてはいかがですか?
上と右を同時に押すと
上か右しか行きません
GetKeyStateでキーの状態が調べられるので、
上が押された時に右が押されているか?
のように調べればよいでしょう。
(同時というのが「ほぼ同時刻にボタンを押す」ということでない場合)
こんなのはどうでしょか。CScrollViewで作ってみました。
class CMyView : public CScrollView {
…
bool m_keydown[4];
enum { UP=0, DOWN=1, LEFT=2, RIGHT=3 };
};
void CMyView::OnInitialUpdate()
{
…
for ( int i = 0; i < 4; ++i ) m_keydown[i]=false;
}
void CMyView::OnKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)
{
if ( VK_UP == nChar ) m_keydown[UP]=true;
else if ( VK_DOWN == nChar ) m_keydown[DOWN]=true;
else if ( VK_LEFT == nChar ) m_keydown[LEFT]=true;
else if ( VK_RIGHT == nChar ) m_keydown[RIGHT]=true;
const CPoint pos_ = GetScrollPosition();
const int n = 16;
CPoint pos = pos_;
if ( m_keydown[UP] && !m_keydown[DOWN] ) pos.y -= n;
if ( m_keydown[DOWN] && !m_keydown[UP] ) pos.y += n;
if ( m_keydown[LEFT] && !m_keydown[RIGHT] ) pos.x -= n;
if ( m_keydown[RIGHT] && !m_keydown[LEFT] ) pos.x += n;
if ( pos_ != pos ) ScrollToPosition( pos );
}
void CMyView::OnKeyUp(UINT nChar,UINT nRepCnt,UINT nFlags)
{
if ( VK_UP == nChar ) m_keydown[UP]=false;
else if ( VK_DOWN == nChar ) m_keydown[DOWN]=false;
else if ( VK_LEFT == nChar ) m_keydown[LEFT]=false;
else if ( VK_RIGHT == nChar ) m_keydown[RIGHT]=false;
}
nさんのやり方できました ありがとうございます
画像を滑らかに移動したいのですが
今の状態では右を押していて次に右以外を押すと一瞬とまり押したキーの方向
に動くのですがなにかいいほうほうありますか
まずはどうしてそうなっているのか御自分で解析してみてください。
原因がわかっていて対処法がわからないのであれば、そう書きましょう。
また、原因の解析法がわからないのであれば、そう書きましょう。
基本的に原因解析も対策検討もあなた自身がやるべきことです。
どこまでやって、どこがわからないのか、
具体的に省略しないで各習慣を付けてください。
がーん、誤字。
誤)
>具体的に省略しないで各習慣を付けてください。
正)
具体的に省略しないで書く習慣を付けてください。
PATIOさん すいませんでしたm(_)m
SetTimerをつかい描画させることでスムーズにうごくようになりました
再描画させるたびに画像がちらつくのですが
いい方法はありませんか?
このラウンジを「ちらつき」で検索すると…