スクリーンセーバーの基礎

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

スクリーンセーバーの基礎

#1

投稿記事 by LisetteLander » 12年前

スクリーンセーバーを作りたいのですが、いかんせん基礎の作り方がよくわかりません。
解決方法がわからないエラーがでます。

コード:

#include <Windows.h>
#include <ScrnSave.h>

LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
		case WM_CREATE:
			//起動処理
			break;

		case WM_DESTROY:
			//終了処理
			break;

		default:
			break;
	}

	return DefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
    return TRUE;
}

BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
    return TRUE;
}

コード:

1>------ ビルド開始: プロジェクト: ScreenSaver, 構成: Release Win32 ------
1>2012/10/02 15:19:56 にビルドを開始しました。
1>InitializeBuildStatus:
1>  "Release\ScreenSaver.unsuccessfulbuild" のタッチ タスクを実行しています。
1>ClCompile:
1>  main.cpp
1>SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です。
1>SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "__imp__InitCommonControlsEx@4" は未解決です。
1>c:\users\lise\documents\visual studio 2010\Projects\ScreenSaver\Release\ScreenSaver.exe : fatal error LNK1120: 外部参照 2 が未解決です。
1>
1>ビルドに失敗しました。
1>
1>経過時間 00:00:00.37
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スクリーンセーバーの基礎

#2

投稿記事 by softya(ソフト屋) » 12年前

文字コードがマルチバイト文字になっていればリンクが成功すると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へにっくす
記事: 634
登録日時: 13年前
住所: 東京都

Re: スクリーンセーバーの基礎

#3

投稿記事 by へにっくす » 12年前

第127章 スクリーンセーバー
ScreenSaverProcは未解決?
ライブラリの指定(scrnsave.lib)を忘れているかな?確認してみてください。

ちなみに__imp__InitCommonControlsExの未解決は、ComCtl32.libの指定も必要なことを示しています。
(昔は必要なかったんですけどね…)

うまくいかなかったらすみません
written by へにっくす

アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Re: スクリーンセーバーの基礎

#4

投稿記事 by LisetteLander » 12年前

お二人ともありがとうございます。
無事デバッグがとおりました。

もう3つ質問したいのですが、
今回プロジェクトのプロパティから構成->リンカ->追加の依存ファイルという項目を設定して直しました。
Program Files(x86)というフォルダにエクスプローラで検索をかけて探して、やたら長いファイルパスを直接入力するのですが、
もうちょっと短いファイルパスにする方法はありませんか?
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\ComCtl32.lib;
プログラミングの館で管理人さんがわざわざローカルディスクのルートにDxLibを置けと書いてあるのでできないのかもしれませんが・・

また、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
というファイルパスの他にも
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\IA64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64
というのが検索結果にあがるのですが、何を使えばいいのでしょうか?
今回は何もオプションがついてなさそうなLib/を使いましたが。

それと最後に、
Dxlibの機能をスクリーンセーバーに使用できないでしょうか?
使用したいのは画像の読み込みや描画です。
ですが、描画というのはDxlibが作ったウィンドウに座標を指定して描画するような感じの機能なわけで、それにそのために作られた画像の読み込み関数も使えない・・・?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: スクリーンセーバーの基礎

#5

投稿記事 by softya(ソフト屋) » 12年前

LisetteLander さんが書きました: もう3つ質問したいのですが、
今回プロジェクトのプロパティから構成->リンカ->追加の依存ファイルという項目を設定して直しました。
Program Files(x86)というフォルダにエクスプローラで検索をかけて探して、やたら長いファイルパスを直接入力するのですが、
もうちょっと短いファイルパスにする方法はありませんか?
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\ComCtl32.lib;
プログラミングの館で管理人さんがわざわざローカルディスクのルートにDxLibを置けと書いてあるのでできないのかもしれませんが・・
ComCtl32.libだけでリンク通りませんか?
私はリンクできますが。
LisetteLander さんが書きました: また、
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
というファイルパスの他にも
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\IA64
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\x64
というのが検索結果にあがるのですが、何を使えばいいのでしょうか?
今回は何もオプションがついてなさそうなLib/を使いましたが。
それが正解です。
IA64はかなり特殊です。
x64は64bitOS専用でコンパイル時に使用します(通常は32/64bit兼用)。
LisetteLander さんが書きました: それと最後に、
Dxlibの機能をスクリーンセーバーに使用できないでしょうか?
使用したいのは画像の読み込みや描画です。
ですが、描画というのはDxlibが作ったウィンドウに座標を指定して描画するような感じの機能なわけで、それにそのために作られた画像の読み込み関数も使えない・・・?
こちらの過去ログにあったと思いますので探してみてください。
「DXライブラリ質問掲示板」
http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
LisetteLander
記事: 147
登録日時: 14年前
住所: 東京

Re: スクリーンセーバーの基礎

#6

投稿記事 by LisetteLander » 12年前

softya(ソフト屋) さんが書きました:ComCtl32.libだけでリンク通りませんか?
私はリンクできますが。
あれ?
・・・すいません、適当なこと言ってました。
それに、
scrnsave.hはComctl32.libに含まれているのでしょうか?
「追加の依存ファイル」はComctl32.libだけ設定してみたらscrnsaveがインクルードできました。
softya(ソフト屋) さんが書きました: それが正解です。
IA64はかなり特殊です。
x64は64bitOS専用でコンパイル時に使用します(通常は32/64bit兼用)。
softya(ソフト屋) さんが書きました: http://hpcgi2.nifty.com/natupaji/bbs/patio.cgi?
ありがとうございます、勉強になりました。
この掲示板で探してみます。

閉鎖

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