別関数に渡す変数のポインタが難しい
構造体初心者で、ポインタもよく分かっていません。
12, 8
と表示するつもりのソースだけど、実行結果は違っていました。
直してください。
ソースは長いけど、スケルトンに構造体とTextOutを付けたぐらいのものです。
#include <windows.h>
struct MYOBJ
{
int a;
int b;
};
LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
MSG msg;
WNDCLASS wc;
投稿できなかったからここを消しました。
wc.lpszClassName = "x";
if(RegisterClass(&wc) == 0)return 0;
HWND hWnd = CreateWindow("x","",WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,320,240,NULL,NULL,hInst,NULL);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
void myfunc(struct MYOBJ *obj)//ここが違うかもしれません。
{
obj->a += 2;
obj->b -= 2;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
char buf[30];
switch(uMsg)
{
case WM_CREATE:
struct MYOBJ myobj;
myobj.a = 10;
myobj.b = 10;
myfunc(&myobj);//ここが違うかもしれません。
return 0;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
wsprintf(buf, "%d, %d", myobj.a, myobj.b);
TextOut(hDC, 0, 0, buf, strlen(buf));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
お礼
その後、別なソースファイルに入れたところエラーが無くなりましたのでとりあえずそちらで対処することにしました。 どうもありがとうございました。
補足
早速の回答ありがとうございます。 試してみたのですが、下記のエラーになってしまいます。 error C2373: 'EnumWindows' : 再定義されています。異なる型修飾子です。 c:\program files\microsoft visual studio\vc98\include\winuser.h(6748) : 'EnumWindows' の宣言を確認してください。 何か他にご回答またはヒントがありましたらよろしくお願いいたします。