• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:GDI+でアニメPNGの表示)

GDI+でアニメPNGの表示

okdummy001の回答

  • ベストアンサー
回答No.3

www >>Among all the image formats currently supported by GDI+, the only formats that support multiple-frame images are >>GIF and TIFF. >>When you call the Image::SelectActiveFrame method on a GIF image, you should use FrameDimensionTime. >>When you call the Image::SelectActiveFrame method on a TIFF image, you should use FrameDimensionPage. MSDNで上のように書いてあったのなら単純にPNGアニメは使えないってことですね。 これで解決ではありませんか?w 私はGIFアニメもTIFFアニメも使ずGDI+も使わないのであれですが、本当にそれは必要なのですか? 下位互換性やDirectDraw又はDirect2D非対応環境にも対処するという必要性がないのであれば、いまどきGDI+にこだわる理由もないように思われますが。 いかがでしょう。

button_denchi
質問者

お礼

そうですね。この質問はここで一旦クローズします。 お付き合いいただきありがとうございました。

関連するQ&A

  • GDI+で画像表示後に画面がちらつく

    GDI+を使いクライアント領域に画像を表示後に、ウィンドウサイズを変更すると変更中に画面が激しくちらつきます。本に書いてあったバックバッファを使った方法も試したのですが変わりませんでした。 どうすればちらつかないようにできますか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C++ #include <windows.h> #include <GdiPlus.h> #pragma comment(lib,"gdiplus.lib") LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("test"); Gdiplus::Bitmap *img1=NULL; Gdiplus::Bitmap *backbuf=NULL; int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; Gdiplus::GdiplusStartupInput gdisi; ULONG_PTR gditoken; if(Gdiplus::GdiplusStartup(&gditoken,&gdisi,NULL)!= Gdiplus::Ok) return 0; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } delete img1,backbuf; Gdiplus::GdiplusShutdown(gditoken); return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCTSTR)szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, TEXT("GDI+で画像表示"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { PAINTSTRUCT ps; HDC hdc; static int imgwidth; static int imgheight; switch (msg) { case WM_CREATE:{ img1=new Gdiplus::Bitmap(TEXT("test.jpg")); if(img1->GetLastStatus() != Gdiplus::Ok){ MessageBox(hWnd,TEXT("ファイルがありません"),NULL,MB_OK); } imgwidth=img1->GetWidth(); imgheight=img1->GetHeight(); backbuf=new Gdiplus::Bitmap(imgwidth,imgheight,PixelFormat32bppARGB); Gdiplus::Graphics g(backbuf); g.DrawImage(img1,0,0,imgwidth,imgheight); break;} case WM_PAINT:{ hdc=BeginPaint(hWnd,&ps); Gdiplus::Graphics g(hdc); g.DrawImage(backbuf,0,0,imgwidth,imgheight); EndPaint(hWnd,&ps); break;} case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • ウィンドウサイズを変更しても、サイズが描画されない。

    小生、只今C言語とWin32APIでアプリを作成しています。 そこで質問なのですが、以下のコードを実行しても、 ウィンドウにウィンドウサイズが描画されません。 例 幅0 : 高さ0 と描画され、ウィンドウのサイズを変更しても、 幅、高さどちらとも、0のままです。 どうか、お分かりになる諸先輩方、ご教授の方宜しくお願いします。 ※尚、文字数の関係もある為、多少削ってあります。 #include <windows.h> #define BUFSIZ 1024 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "WindowSizeAndOneButton"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { HDC hdc; PAINTSTRUCT ps; static int width, height; static TCHAR buf[BUFSIZ]; width = height = 0; switch(msg){ case WM_DESTROY: PostQuitMessage(0); return 0; case WM_SIZE: width = LOWORD(lp); height = HIWORD(lp); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); wsprintf(buf, "幅 = %d : 高さ = %d", width, height); TextOut(hdc, 10, 10, buf, lstrlen(buf)); EndPaint(hWnd, &ps); } return DefWindowProc(hWnd, msg, wp, lp); }

  • WM_CLOSEで閉じれないウィンドウを閉じるには?

    以下にソースを張ります。 #include <stdio.h> #include <windows.h> BOOL CALLBACK EnumWindowProc(HWND hwnd, LPARAM lp) { static bool is_first = true; DWORD style = ::GetWindowLong(hwnd, GWL_STYLE); DWORD dwPID; if ( ::IsWindow(hwnd) && ::IsWindowVisible(hwnd) && (style&WS_CAPTION) && !(style&WS_POPUP) ) { char buf[65536]; ::GetWindowText(hwnd, buf, 65535); GetWindowThreadProcessId( hwnd, &dwPID ); if ( buf[0] != '\0' ) { if ( is_first ) is_first = false; else //printf("%c\n", 1); printf("%s%d\n", buf,hwnd); } } return TRUE; } int main (void){ ::EnumWindows(EnumWindowProc, 0); HWND hWnd; printf("プロセスIDを入力:\n"); scanf("%d",&hWnd); if( hWnd != NULL ){ printf( "終了します。-- pause --\n" ); getchar(); PostMessage( hWnd, WM_CLOSE, 0, 0 ); }else{ printf( "起動してないウインドウズです。\n" ); } return 0; } これですとたとえばメモ帳を編集していたときに WM_CLOSE メッセージを送ったときに「変更を保存しますか?」のようなダイアログが出る アプリがあります。これをダイアログが出ずに強制終了するには どうしたらよいでしょか?よろしくお願いします。

  • LoadImageを使用し、タイトルバーのアイコンを表示したいのですが。

    こんにちは。 いつもお世話になっております。 小生、只今WindowsXPSP3上で、C言語とWin32APIを使用し、BCC5.5.1でコンパイルしながら、Windowsプログラミングを勉強しています。 度々、質問させて頂き、その都度回答を頂戴し、誠に恐縮ではあるのですが、今回も質問させて下さい。 内容はLoadImage関数を利用した、タイトルバーのアイコン表示です。 以下のコードを試しても、タイトルバーにアイコンが表示されません。 かといって、色々なサイトを見、LoadIconを使用しようとして、MSDNを調べると"この関数は、LoadImage 関数に取って代わられました。"と表記されています。 #if 1 /* タイトルバーにアイコン表示 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "TitleBarIcon"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, "Linux.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "TitleBarIcon", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 200, 200, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } お忙しい中、申し訳ございませんが、 先輩方、アドバイス宜しくお願い致します。 ちなみに読み込んでいるアイコンのサイズは幅、高さとも32ピクセルです。

  • C言語でWin32APIを使い、子ウィンドウを表示したいのですが。。。

    いつもお世話になっております。 小生、只今C言語とWin32APIを使い、WindowsXPSP3上で、BCC5.5.1を使用し、Windowsプログラミングを勉強しています。 今回、子供ウィンドウを表示しようとしたのですが、 下記のコードをコンパイルしても、子供ウィンドウが表示されません。 大変、申し訳ございませんが、先輩方、アドバイス宜しくお願いします。 /* 子供ウィンドウを作成 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "ChildWindow"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { static HWND hWndChild; HINSTANCE hInst; switch(msg){ case WM_CREATE: hInst = ((LPCREATESTRUCT)lp)->hInstance; hWndChild = CreateWindow( "Child", "子供ウィンドウ", WS_CHILD | WS_SYSMENU | WS_THICKFRAME | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 200, 100, hWnd, 0, hInst, NULL); ShowWindow(hWndChild, SW_SHOW); UpdateWindow(hWndChild); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }

  • 子ウィンドウの作成方法

    #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("Window01"); TCHAR szClassName2[] = TEXT("Window02"); int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow){ MSG msg; BOOL bRet; if (!InitApp(hCurInst)) return FALSE; if (!InitInstance(hCurInst, nCmdShow)) return FALSE; while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) { if (bRet == -1) { break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; WNDCLASSEX wc2; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc2.cbSize = sizeof(WNDCLASSEX); wc2.style = CS_HREDRAW | CS_VREDRAW; wc2.lpfnWndProc = WndProc; wc2.cbClsExtra = 0; wc2.cbWndExtra = 0; wc2.hInstance = hInst; wc2.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc2.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc2.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); wc2.lpszMenuName = NULL; wc2.lpszClassName = szClassName; wc2.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); if((RegisterClassEx(&wc)||RegisterClassEx(&wc2)==0)) return 0; return TRUE; } BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; HWND hWnd2; hWnd = CreateWindow(szClassName, TEXT("親ウィンドウ"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL ); if(!hWnd) return FALSE; hWnd2 = CreateWindow(szClassName2, TEXT("子ウィンドウ"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, NULL, hInst, NULL ); if(!hWnd2) return FALSE; ShowWindow(hWnd, nCmdShow); ShowWindow(hWnd2, nCmdShow); UpdateWindow(hWnd); UpdateWindow(hWnd2); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } 子ウィンドウの作り方を理解したく、ただウィンドウを表示するプログラムを作ろうとしました。 しかし、うまくいきません。 一体なにがダメなんでしょうか?

  • 別関数に渡す変数のポインタが難しい

    構造体初心者で、ポインタもよく分かっていません。 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; }

  • プログラミングでエラーが出ました。教えてください。

    Visual C++ 2010で 1>LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。 というエラーが出ました。 プログラムは、↓です。 #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE, int); TCHAR szClassName[] = TEXT("sample01"); int WINAPI WInMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow){ MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst, nCmdShow)) return FALSE; while((bRet = GetMessage(&msg, NULL, 0, 0))!= 0){ if(bRet == -1){ MessageBox(NULL, TEXT("GetMassageエラー"),TEXT("Error"),MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } ATOM InitApp(HINSTANCE hInst){ WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = szClassName; wc.hIconSm = (HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } BOOL InitInstance(HINSTANCE hInst, int nCmdShow){ HWND hWnd; hWnd = CreateWindow(szClassName,TEXT("猫でもわかるWindowsプログラミング"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } 教えてください。 よろしくお願いします。

  • Windowsプログラミングのひな形の段階でエラーが出てしまいます。

    指定されたパスが見つかりませんと出てウィンドウが生成されません。 コードが違うのでしょうか・・それともプロジェクトの作り方に問題があるのでしょうか。VisualStudio2005のVisual C++でつくっています。 以下コードです↓ //hinagata.cpp #include<windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); ATOM InitApp(HINSTANCE); BOOL InitInstance(HINSTANCE,int); char szClassName[]="hinagata"; int WINAPIMain(HINSTANCE hCurInst,HINSTANCE hPrevInst,LPSTR lpsCmdline,int nCmdShow) { MSG msg; BOOL bRet; if(!InitApp(hCurInst)) return FALSE; if(!InitInstance(hCurInst,nCmdShow)) return FALSE; while((bRet=GetMessage)&msg,NULL,0,0))!=0){ if(bRet==-1){ MessageBox(NULL,"GetMessageエラー","Error",MB_OK); break; }else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return(int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize=sizeof(WNDCLASSEX); wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=WndProc; //プロシージャ名 wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInst;//インスタンス wc.hIcon=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE |LR_SHARED); wc.hCursor=(HCORSOR)Loadimage(NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName=NULL;//メニュー名 wc.lpszClassName=(LPCSTR)szClassName; wc.hIconSm=(HICON)LoadImage(NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return(RegisterClassEx(&wc)); } //ウィンドウの作成 BOOL InitInstance(HINSTANCE hInst,int nCmsShow) { HWND hWnd; hWnd=CreateWindow(szClassName, //タイトルバーにこの名前が表示される "犬でもわかるWindowsプログラミング", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp) { switch(msg){ case WM_DESTROY: PostQuitMessage(0); break; dafault: return(DefWindowProc(hWnd,msg,wp,lp)); } return 0; }

  • LoadImageを使ったアイコンファイルの読み込みの前処理

    いつも、お世話になっております。 小生、只今WindowsXPSP3上にてC言語とWin32APIを使い、BCC5.5.1でコンパイルし、Windowsプログラミングを勉強しています。 アイコンの読み込みについて質問なのですが、 WndProc関数内のWM_CREATEメッセージにて、アイコンを読み込みたいのですが、ビットマップを読み込む時の様に、CreateCompatibleDCを使い、 メモリデバイスコンテキストを作成する必要があるのでしょうか?? 以下にコードを記します。 お忙しい中、大変、申し訳ございませんが。 先輩方、アドバイスの方、宜しくお願いします。 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTANCE, LPCSTR); BOOL InitInstance(HINSTANCE, int, LPCSTR); int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MSG msg; BOOL bRet; LPCSTR szClassName = "アイコンを読み込む"; if(!InitApp(hCurInst, szClassName)){ return FALSE; } if(!InitInstance(hCurInst, nCmdShow, szClassName)){ return FALSE; } while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0){ if(bRet == -1){ MessageBox(NULL, "GetMessage Error", "Error", MB_OK); break; } else{ TranslateMessage(&msg); DispatchMessage(&msg); } } return (int)msg.wParam; } //ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst, LPCSTR szClassName) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hCursor = (HCURSOR)LoadImage( NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = NULL; wc.lpszClassName = (LPCSTR)szClassName; wc.hIconSm = (HICON)LoadImage( NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE | LR_SHARED); return (RegisterClassEx(&wc)); } //ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow, LPCSTR szClassName) { HWND hWnd; hWnd = CreateWindow( szClassName, "Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL); if(!hWnd){ return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { static HICON hIcon; switch(msg){ case WM_CREATE: //ここにメモリデバイスコンテキストを取得の処理が必要?? hIcon = (HICON)LoadImage( NULL, "Linux.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE); if(hIcon == NULL){ MessageBox(hWnd, "It failed in reading the icon file.", "Error", MB_OK | MB_ICONWARNING); return 0; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; }