私はWinAPIにはかなり新しくなっているので、時には多くの基本的な間違いを犯します。あなたは警告されました、私の問題に移りましょう:P/ボタンのテーブルを処理する(WinAPI)
グリッドのようなものを作りたいと思います。グリッドのフィールドの1つをクリックすると、ビットマップが表示されます。私はボタンとして使用したいフィールドのビットマップを作った。最初のユーザーはグリッドのサイズを入力するので、私はそのビットマップでボタンの動的ライブラリを作成しました。残念ながら、クリックしたときの対処方法はわかりません。ここに私のコードだ:
WindowProcedureで//there I create my window. I also make a global variable bool* table and HWND next.
table = new bool[x*y];
for (int i = 0; i < x*y; ++i)
table[i] = 0;
//the table represents if the fields are already filled or not.
HWND* buttons = new HWND[x*y];
next = CreateWindowEx(4, _T("BUTTON"), _T("MOVE"), WS_CHILD | WS_VISIBLE, x * 12 - 25, (y + 4) * 25 - 90, 100, 50, hwnd, NULL, hThisInstance, NULL);
for (int i = 0; i < x; ++i)
{
for (int j = 0; j < y; ++j)
{
buttons[i + j * x] = CreateWindowEx(0, _T("BUTTON"), NULL, WS_CHILD | WS_VISIBLE | BS_BITMAP, 0 + i * 25, 0 + j * 25, 25, 25, hwnd, NULL, hThisInstance, NULL);
SendMessage(przyciski[i + j * x], BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)field);
}
}
そして今、():
switch (message)
{
case WM_COMMAND:
if ((HWND)lParam == next) /* there will be some code in the future ;) */;
else
{
//So here I need to set correct the value in table to 1
//I have a handle to clicked button (HWND)lParam, but I don't know how to get it's position in the table
}
break;
私はHWNDとint型のx、yはいくつかの構造体を実行しようとしましたが、私はまだこれを管理する方法がわかりません。ところで、コードは非常に古いように見えるかもしれませんが、私はWindows XPが実行できるアプリケーションを作成する必要があります(それは学校向けのプロジェクトです。Pに問い合わせないでください)。さらに、私は非常に古いチュートリアルを使用します。
ループスルーボタンアレイ、および一致するHWND値、いいえ? – OldProgrammer
ええ...どうしたのですか?それはとても明らかです...ありがとう! :D – Executor1909
すべてのボタンに一意のIDを割り当てる必要があります。このIDは 'WM_COMMAND'の' LOWORD(wParam) 'に戻されます。あなたが '256x256'グリッドよりも大きくないと思うなら、IDは' 256 * y + x'の形式になります。 – RbMm