- ベストアンサー
数独の入力画面作成
C言語を使って入力された「数独」問題を、コンピュータにとかせる処理を作っています(処理の部分はある程度完成)。 それで、「9×9」のマスの入力する画面を作りたいのですが、 それらしいものをWINAPIにて探したら「リストビュー」しか見当たりませんでした。 ですが「リストビュー」は基本的に、 一番左側の列しかカーソルを選択して値を入力するということは出来ないみたいです。(他の列もしようとしたら難しいらしい) (だからといってテキストボックスを81個用意するのはやりたくありません) ですので入力画面を作れそうないい方法を教えてもらえないでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私は、VC++ ですが: OnDraw()関数内で、 pDC->MoveTo()、 pDC->LineTo()、 を使って数字枠を描画し、 pDC->DrawText() で数字を書いています。 APIでも同じ機能の関数がありますから、それらを使えばよろしいかとおもいます。 リストボックスも考えましたが、画面上で選んだ枠の背景色を変えたり、問題として入力された数字の色を変える、サイズの変更など、上記の方法が楽でした。
その他の回答 (1)
- buihyaku
- ベストアンサー率29% (97/326)
手軽に入力だけサポートする画面を作りたいのでしたらやはりリストビューが一番簡単かと思います。 1番左の列以外に値を入力することはできませんが、エディットボックスを必要に応じて入力位置に移動してやることで入力できているようにみせかけるというのが一般的なやり方になります。大まかな処理の流れは以下のような感じになります。 0.非表示のEditBoxをダイアログ上に配置しておく。 1.マウスクリックされたらその座標でSubItemHitTest()で行、列を判定 2. GetSubItemRect()でそのアイテムのサイズを取得しそのサイズ、位置にあわせてEditBoxを移動、表示状態にする 3.EditBoxのKillFocusでEditBoxを非表示にし、入力されている値をリストビューの該当アイテムにセットする。 うまく作ればまったく違和感無くListViewに値を入力できているようにみえます。
お礼
回答ありがとうございました。
お礼
回答ありがとうございます。 私も枠や背景色を変えたいと思っていました。 ですので、リストビュー以外の回答があればと思っていましたが、 描画しかなさそうですね。 というわけで、一度「描画」で作ってみようと思います。