Win32 プログラミング

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
駆け出し
記事: 25
登録日時: 8年前

Win32 プログラミング

#1

投稿記事 by 駆け出し » 8年前

こんばんは。今、自分でWindowsMediaPlayerもどきを作っています。CunstomDrawを使い、すでに再生されたエリアは青く塗るようにしたいのですが、塗られないままで、そのままです。(画像を添付します。)
どこが間違っているかを、ご教示していただけないでしょうか。(音源は、ネット上に公開されている著作権フリーのものを利用しております) MFP【Marron Fields Production】

こちらのソースは最新のものではありません。

CustomDraw部分
► スポイラーを表示
ウィンドウプロシージャ-
► スポイラーを表示
MP3ファイル読み込み部分
► スポイラーを表示
strdef.h
► スポイラーを表示
添付ファイル
スクリーンショット (41).png
最後に編集したユーザー 駆け出し on 2017年1月08日(日) 08:57 [ 編集 1 回目 ]

Math

Re: Win32 プログラミング

#2

投稿記事 by Math » 8年前

VS2015上で再現してみようと思ったけどこれだけでは出来なさそうなので。”Debug"をされているようですが、switch (lpDraw->dwDrawStage)にブレークポイントを設定して[F11]でステップ実行されたらわかるのではありませんか?

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#3

投稿記事 by 駆け出し » 8年前

こんばんは。Debugをして、いくつか試行錯誤してみたのですが、関数:FillRectの戻り値は常に1なのです...
FillRect関数(MSDN)
また、いくつか試行錯誤した結果、余計に自分でもわからなくなってきてしまいました。(CustomDraw.cppの抜粋を見ていただけると助かります)
デタッチ(?)していないので結果が反映されないよ、ということは読んだのですが、c++かつ無償版のVC2015にはついていない機能を使っていたもので...

また、検証用に現在私が書いたソースコードすべて(ヘッダ、リソース含む)を置いておきます(バグあるかもです...)。
ヘッダファイルとソースファイルのパスを分けておいているので、一部修正しないと検証できないかもしれないです。お手数をおかけしますが、よろしくお願いします。

[追記]
いくつかのファイルにバグがあることと、処理を変更したので、新しい書き込みから、そちらに上がっているファイルはコピペしてください。
Zipを置いておきましたので、そちらからDownloadよろしくお願いします。
また、こちらのコードは最新のものではありません。
res.rc
► スポイラーを表示
strdef.h
► スポイラーを表示
rc.h
► スポイラーを表示
BaseFunc.cpp
► スポイラーを表示
CustomDraw.cppより
► スポイラーを表示
CustomDraw.cpp
► スポイラーを表示

Main.cpp
► スポイラーを表示
SoundAPI.cpp
► スポイラーを表示
UserInerface.cpp
► スポイラーを表示
最後に編集したユーザー 駆け出し on 2017年1月08日(日) 08:52 [ 編集 2 回目 ]

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#4

投稿記事 by 駆け出し » 8年前

こんばんは。連投失礼します。
まず、検証用に置かせていただいたソースコードですが、バグがありました。申し訳ないです。

UserInterface.cppのGetUserFilesの、一つのファイルのみが選択されたときの処理を完全にDebugするのを忘れてました。(複数のほうのみチェックして油断してました。)つきましては、UserInerface.cppは次のようになります。また、新たに関数を追加しています。

こちらのコードは最新のものではありません。

UserInerface.cpp,strdef.h,Main.cpp,CunstomDraw.cpp
► スポイラーを表示
次に、青い部分の描画ですがWM_TIMERイベントがあるごとにSetTrackbarStatusを呼び出すことにより、更新部分を反映させることに成功しました。

勝手に一人で掲示板を荒らし、申し訳ありませんでした。
最後に編集したユーザー 駆け出し on 2017年1月08日(日) 08:59 [ 編集 1 回目 ]

Math

Re: Win32 プログラミング

#5

投稿記事 by Math » 8年前

>勝手に一人で掲示板を荒らし、申し訳ありませんでした。
掲示板を書くだけで気合いがはいるしプログラムも整理されるし”荒らし”てるわけではないと思います。
時にはすぐ”自己解決しました。”と風の如く去る人も...
"掲示板の効果”はで絶大ですよ。

Math

Re: Win32 プログラミング

#6

投稿記事 by Math » 8年前

>関数:FillRectの戻り値は常に1なのです...
1はもしかしてTRUEでは...

Math

Re: Win32 プログラミング

#7

投稿記事 by Math » 8年前

実際の開発現場ではスタブ (stub)とドライバー(driver)という考え方がある。
https://ja.wikipedia.org/wiki/%E3%82%B9 ... F%E3%83%96
このようにスタブ毎にテスト出来ないと自分でもわけが分からない"スパゲティ"プログラムになる。基本設計書をまず見せて頂き1ファイル事にテスト可能な設計になっているか検討する必要があります

Math

Re: Win32 プログラミング

#8

投稿記事 by Math » 8年前

描画プログラムをテストするプログラムを考えてみました。

コード:

#include <windows.h>//////// 検証用プログラム:ドライバー:描画チェッカー
#include <stdio.h>////////// 2017/01/06 Writen by Math
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
	HDC hdc;PAINTSTRUCT ps;static INT imode;POINT points[3];static INT ret;
	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_CREATE:printf("<<<--->>>\n\n");
		imode = MessageBox(
			NULL , TEXT("return値を確認しますか?。") ,
			TEXT("SetPolyFillMode") , MB_YESNO
		);
		if (imode == IDYES) imode = WINDING;
		else imode = ALTERNATE;printf("001--->>>\n\n");
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hwnd , &ps);/////////////////////////////////////
		SelectObject(hdc , CreateSolidBrush(0xFF));
		SetPolyFillMode(hdc , imode);
		
		ret=Rectangle( hdc, 10, 20, 100, 110 );printf("ret=%d\n",ret);
        ret=Ellipse( hdc, 10, 20, 100, 110);printf("ret=%d\n",ret);

        points[0].x = 190; points[0].y =60;
        points[1].x = 120; points[1].y = 140;
        points[2].x = 260; points[2].y = 140;
 
        ret=Polygon( hdc, points, 3 );printf("ret=%d\n",ret);
        ret=TextOut(hdc, 130,10, TEXT("Hello World!"), 12);printf("ret=%d\n",ret);
        

		EndPaint(hwnd , &ps);
		DeleteObject(SelectObject(hdc , GetStockObject(WHITE_BRUSH)));
		return 0;
	}
	return DefWindowProc(hwnd , msg , wp , lp);
}
///////////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
			PSTR lpCmdLine , int nCmdShow ) {////////////
    AllocConsole();///////////コンソール///////////////// ---[Debug Print]---
    FILE* out = 0; freopen_s( &out, "CON", "w", stdout );
    FILE* in = 0; freopen_s( &in, "CON", "r", stdin );
    ///            /////////Class////////////////////////
	HWND hwnd;	MSG msg;	WNDCLASS winc;
	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= winc.cbWndExtra	= 0;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName	= NULL;
	winc.lpszClassName	= TEXT("Form1");/////////Class//////////
	if (!RegisterClass(&winc)) return -1;////////Registe////////
	hwnd = CreateWindow(
			TEXT("Form1") , TEXT("Form1Samp") ,	WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,	CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL , hInstance , NULL
	);//////////////////////////////////////////LOOP/////////////
	if (hwnd == NULL) return -1;
	while(GetMessage(&msg , NULL , 0 , 0)) DispatchMessage(&msg);
	//コンソール解放////////////////////////////コンソール/////// ---[Debug Print]---
    fclose( out ); fclose( in ); FreeConsole(); ////Close////////
	return msg.wParam;
}
///

Math

Re: Win32 プログラミング

#9

投稿記事 by Math » 8年前

プロジェクト・ファイルを送って頂けるとコマンドライン・コンパイルができるので大変助かります。よろしくお願い致します。(.vcxprojファイルです)

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#10

投稿記事 by 駆け出し » 8年前

おはようございます。
実際の開発現場ではスタブ (stub)とドライバー(driver)という考え方がある。
https://ja.wikipedia.org/wiki/%E3%82%B9 ... F%E3%83%96
このようにスタブ毎にテスト出来ないと自分でもわけが分からない"スパゲティ"プログラムになる。基本設計書をまず見せて頂き1ファイル事にテスト可能な設計になっているか検討する必要があります
といいうことは、ここで○○を実装、あそこで××を実装、といった具合に決めてからコードを書くということでしょうか?
プロジェクト・ファイルを送って頂けるとコマンドライン・コンパイルができるので大変助かります。よろしくお願い致します。(.vcxprojファイルです)
添付しておきます。
コピペさせて申し訳ないです。これからはプロジェクトごと送ります...

.vcxprojは送れないようなので、zipにして送ります。
また、たぶん上にあるソースとは変わっているので、今編集している状態のソースを送ります.

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#11

投稿記事 by 駆け出し » 8年前

vcxobj ファイル
添付ファイル
SoundPlayer.vcxproj.zip
(1.44 KiB) ダウンロード数: 94 回

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#12

投稿記事 by 駆け出し » 8年前

今現在のソースコード
添付ファイル
SoundPlayer.zip
(19.13 KiB) ダウンロード数: 102 回

Math

Re: Win32 プログラミング

#13

投稿記事 by Math » 8年前

>といいうことは、ここで○○を実装、あそこで××を実装、といった具合に決めてからコードを書くということでしょうか?
そうです。設計書をもとにスケルトンを作らないでいきなりプログラムを書くといずれ破綻します。
>.vcxprojは送れないようなので、zipにして送ります。
他のトピックスでは送ったり、送られたりしてますよ。コンテキストメニューの”送る”からエディタに送ればいいはずです。でも全部をzipで貰う方がありがたいですね。

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#14

投稿記事 by 駆け出し » 8年前

>といいうことは、ここで○○を実装、あそこで××を実装、といった具合に決めてからコードを書くということでしょうか?
そうです。設計書をもとにスケルトンを作らないでいきなりプログラムを書くといずれ破綻します。
なるほど、自分これまで何度か破たんしてる(なんでこの処理をしているかわからなくなる)ので、これからは何を実装するか決めてから実装します。

Math

Re: Win32 プログラミング

#15

投稿記事 by Math » 8年前

Windows10,VS2015で正常に動きました。

駆け出し
記事: 25
登録日時: 8年前

Re: Win32 プログラミング

#16

投稿記事 by 駆け出し » 8年前

こんばんは。
Mathさん、いろいろ教えていただいてありがとうございました。

これにて、解決とさせていただきます。

閉鎖

“C言語何でも質問掲示板” へ戻る