• ベストアンサー

WINDOWSプログラミングをしている方へ質問

WINDOWSプログラミングしている方へ質問です。 DOSプログラム #include <stdio.h> int main(void) { ・・・・・・・   return 0; } までの文+基本的な関数を覚えているプログラマが大半(ほぼ全員)だと思いますが WINDOWSプログラム #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szClassNme[] = "任意の文字"; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInst, LPSTR lpszCmdLine, int nCmdShow) { ・・・・・・ return (0L); } までの文+基本的な関数をWINDOWSプログラマは覚えているのでしょうか? それともCの基本的な事が分かるうえで必要に応じて関数や決まり事 を確認(本やサイト等)しながらプログラミングを しているのでしょうか? 両方のの経験者の方、暇な時にでも回答お願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

Windows上のプログラミングでWinApiなどを使用することや、 MFCなどのフレームワークなどを使うプログラミングなどでも、 そうですが、使っていくうちの勝手に覚えます。しかし、 ある程度覚えていても、必ず仕様を確認します。 これはOSのメジャーバージョンアップやWin95/98系 NT系などで微妙に関数の仕様やメッセージの仕様が 微妙に変わったりするためです。 そういう意味で、機械的に構文を覚えることには 何の意味もないような気がします。

その他の回答 (3)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

MFCとかを使わずにWin32で組んだりもしてきた身としては、 シンプルなウィンドウくらいはMSDNやインテリセンスが なくてもかけますが、実用的なコードはさすがに無理です…。 どうせAPIの仕様を確認しますし、MSDNを参照します。 # MSDNで細部を確認せずに書くのは危険ですし、 # 熟練者でも「念のため」確認したりするのは普通にありますから、 # MSDNをまったく見ずにコードを書く人は素人(※)だと思う…。 # ※ハッカーなども含む(≒必ずしも技術の有無でなく姿勢の問題) 昨今は、お仕事ではMFCなどのフレームがあるので、 自分でWinMainを書くことは少なくなりましたので、 そんなものをかけても意味はないように思いますが、 動作順や、細部の挙動などを知っていることは重要だと思います。 # おそらく、多くの職業プログラマは、動作概要を説明できますが、 # 丸暗記でコードはかけない、くらいではないかと。>WinMain等

回答No.2

ウィンドウを表示するための基本的な順序 ・RegisterClass(Ex) ・CreateWindow(Ex) ・メッセージループ は覚えていますが,APIの使用についてはMSDN引きます。 そもそも,能動的に「覚える」という行為は行ったことがないです。 気が付いたら「覚えていた」という状態にはなっていますが。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

趣味で作る程度ですが Windiwsの関数とか覚えてません WndProcとWinMainはひな形からコピーして使ってます インテリセンスとヘルプマニュアルは必需品ですね Cの標準関数ですら引数確認でしょっちゅうマニュアル見ます。

関連するQ&A

  • 何もしないメッセージだけ表示するウィンドウ

    ゲーム用に何もしないメッセージだけ表示するウィンドウを作りたいのですが、 猫でもわかるゲームプログラミングのコードが間違っているのか、 機能しません。 #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { return (int)msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg){ } return 0; } このように、打ち込んだのですが、どこが間違っているのか解りません。 回答お願いいたします。

  • AppleScriptでプログラミング

    私は最近C言語のプログラミングに興味を持ち、Mac os 10.3.9に入っていた「AppleScript」の中の「スクリプトエディタ」で、インターネットで見つけた文字列、例えば下の #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ if( DxLib_Init() == -1 ) return -1; WaitKey() ; DxLib_End() ; return 0 ; } などを打ち込んでみたのですが、さっぱりコンパイルできません。 なにしろ初心者なもので、何がなんだかさっぱり分からず困っています

  • Windowsゲームプログラミングを始めたのですが

    最近ゲームのプログラムを始めた者です。 C言語でWindowsプログラムを書き始めたのですが、最初の宣言を行った時点でコンパイル時に大量のエラーが出てしまいました。 ↓が内容です。 #include<windows.h> #include<stdio.h> #include<stdlib.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){ } 使用OSはVistaです。 急いではいないので、どなたか解決法を知っている方、ご指導お願いします。

  • msgが定義されていない

    Visual Studio2019でwindowsアプリケーションでゲームを作っているんですが、 どうやってもmsgが定義されていないが直りません。 #include <windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); //WinMain関数 int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { //ウィンドウクラスの登録 //メインウィンドウの生成 //メッセージループ return (int)msg.wParam; } //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { //メッセージごとにやりたいことを記述する } return 0; } ご教示お願いします。

  • spawnl

    #include "stdafx.h" #include <process.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // TODO: この位置にコードを記述してください。 _spawnl(_P_WAIT, "chkbook.exe",...); return 0; } 上のようにして、MFCサンプルの ckhbook.exe  (引数はありません。) を呼び出そうとしましたが、上手く動きません。  どのように修正すれば良いのでしょうか?  コンソールプログラムの場合は、 簡単に呼び出せます。  よろしくお願いいたします。

  • C言語で黒い画面が出る

    gcc使ってC言語を勉強していますが、スタートmainをwindowsにしても黒い画面が出てきます。これを消すことはできませんか。やりたいことは単にメッセージボックスを表示して簡単なファイル入出力するだけです。ソースコードは以下 #include <windows.h> #include <tchar.h> int WINAPI WinMain( HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lpsCmdLine, int nCmdShow) { MessageBox( NULL, _T("Hello, Windows!"), _T("sample"), MB_OK); return 0; }

  • Windowsプログラミング

    識別子が無効ですといわれて困ってます。一応打ち込んだものを乗せておきます。VisualC++2008でやりました。 // sample01.cpp #include<windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); ATOM InitApp(HINSTACE); BOOL InitInstance(HINSTANCE); 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("GetMessageエラー"), TEXT("Error"), MB_OK); break; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } } // ウィンドウクラスの登録 ATOM InitApp(HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndPrec; // プロシージャ名 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); return (RegisterClassEx(&wc)); } // ウィンドウの生成 BOOL InitInstance(HINSTANCE hInst, int nCmdShow) { HWND hWnd; hWnd = CreateWindow(szClassName, // タイトルバーにこの名前が表示されます TEXT("猫でもわかるWindowsプログラミング"), WS_OVERLAPPEDWINDOW, // ウィンドウの種類 CW_USEDEFAULT // x座標       CW_USEDEFAULT // y座標    CW_USEDEFAULT // 幅   CW_USEDEFAULT // 高さ NULL, // 親ウィンドウのハンドル、親を作るときはNULL NULL, // メニューハンドル、クラスメニューを // 使うときはNULL hInst, // インスタントハンドル NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } // ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UNIT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } 長いですがよろしくお願いします。 return 0; }

  • windowsプログラム、文字化けする

    windowsプログラム、文字化けする 最近になってwindowsプログラムに興味を持ってやってみようと思い サイトでいざ勉強しようと思ったんですが、サンプルコードをVC++2008で コンパイル実行してみると、すべて文字化けしています。なぜでしょう ちなみにOSはXP、サンプルコードてのが #include <windows.h> int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello World!", "メッセージ", MB_OK); return 0; } メッセージボックスでの文字表示のサンプルみたいですがどうもうまくいきません もう1つ このサンプルをソースファイルの拡張子cppでやるとエラーがでるんですがcだと警告が出るだけなんですが これはいったいなんででしょうか。 すみません、最近こういう勉強を始めたばかりなので。

  • DXライブラリでの画像表示

    ゲームプログラミング初心者です。 DXライブラリを用いて画像を表示させようと以下のプログラムを組んで実行してみたのですが、ウィンドウは表示されるのに画像が表示されません。 使用しているのはBorland C++ 5.5.,BCC Developer,DXライブラリです。 ちゃんと画像もプロジェクトファイルの中に入っていると思います。 OSはwindows8です。 考えられる原因を教えてもらえないでしょうか。 #include "DxLib.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE); if( DxLib_Init() == -1 ) { return -1; } LoadGraphScreen(0,0,"image.png",TRUE); WaitKey(); DxLib_End(); return 0; }

  • プロトタイプが必要な場合

    WndProc関数の前にFunc関数を書いているから、WndProc関数の ソースがコンパイルされる時はFunc関数は既に読み込み済みで Func関数のプロトタイプは必要無いと思ったんだけど、必要なんですか? #include <windows.h> int Func(HWND); ←これは必要ですか? LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPInst, LPSTR lpstr, int n) {  … } int Func(HWND hWnd) {  … } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {  static int i;  switch(uMsg){  case WM_CREATE:   i = Func(hWnd);   break;  … }