VCでデスクトップ画面に、テレビのチャンネル表示のような文字を表示させたいのですが、方法がわかりません。

別のウインドウに隠れることなく表示できて、マウスでクリックできないようなものを作ることは可能でしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

 こんにちは。


 当方が知る限りではDirectDrawで出来ます(Direct3Dでは分からない)。
 以下は1秒間デスクトップの中央に描写を行いますが、実際のプログラムは、1秒で終わる事は無いので、別途DirectInputを併用して、入力を待機する事になると思います。
 ビットマップファイルを読み込んで、DirectDrawSurfaceに向かって送り込む際、必ず、SYSTEMメモリ側のDirectDrawSurfaceを仲介してください。
 ビデオカードの種類によっては、VRAM側で出来てしまう物もあるのですが、其れを期待すると、別のビデオカードで失敗する事があります。
 昔のゲームはこのような理由で、シャットダウンする物がありました。以下参考程度に。

#include<windows.h>
#include<tchar.h>
#include<ddraw.h>
#include<mmsystem.h>
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "ddraw.lib")
#pragma comment(lib, "winmm.lib")

//スレッドから参照するデータ
struct DATA
{
LPDIRECTDRAW7 pDD;
LPDIRECTDRAWSURFACE7 pDDSScreen;//デスクトップ
LPDIRECTDRAWSURFACE7 pDDSOffScreen;//VRAM側バックバッファ
LPDIRECTDRAWSURFACE7 pDDSBitmap;//SYSTEM側バックバッファ
DWORD dwDesktopWidth;
DWORD dwDesktopHeight;
};
//COMの解放
static VOID Destruct(DATA& data)
{
data.pDDSScreen->Release();
data.pDDSOffScreen->Release();
data.pDDSBitmap->Release();
data.pDD->Release();
}
//DirectDrawの作成
static LPDIRECTDRAW7 CreateDD()
{
LPDIRECTDRAW7 pDD = NULL;
::DirectDrawCreateEx(NULL, (LPVOID*)&pDD, IID_IDirectDraw7, NULL);
if(!pDD)return NULL;
pDD->SetCooperativeLevel(NULL, DDSCL_NORMAL);
return pDD;
}
//DirectDrawSurface作成(デスクトップ側)
static LPDIRECTDRAWSURFACE7 CreateScreenSurface(LPDIRECTDRAW7 pDD)
{
LPDIRECTDRAWSURFACE7 pDDS = NULL;
DDSURFACEDESC2 ddsd2 = {sizeof(ddsd2)};
ddsd2.dwFlags = DDSD_CAPS;
ddsd2.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
pDD->CreateSurface(&ddsd2, &pDDS, NULL);
return pDDS;
}
//DirectDrawSurface作成(オフスクリーン側:バックバッファの事)
static LPDIRECTDRAWSURFACE7 CreateOffScreenSurface(LPDIRECTDRAW7 pDD, DWORD dwWidth, DWORD dwHeight, bool bSystem = false)
{
LPDIRECTDRAWSURFACE7 pDDS = NULL;
DDSURFACEDESC2 ddsd2 = {sizeof(ddsd2)};
ddsd2.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
ddsd2.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | (bSystem ? DDSCAPS_SYSTEMMEMORY : DDSCAPS_VIDEOMEMORY);
ddsd2.dwWidth = dwWidth;
ddsd2.dwHeight= dwHeight;
pDD->CreateSurface(&ddsd2, &pDDS, NULL);
return pDDS;
}
//ビットマップを読み込んで、SYSTEMメモリ側のDirectDrawSurfaceに送り込む
static LPDIRECTDRAWSURFACE7 CreateBitmapSurface(LPDIRECTDRAW7 pDD, LPCTSTR tstrFileName, DWORD dwWidth, DWORD dwHeight)
{
DDSURFACEDESC2 ddsd2 = {sizeof(ddsd2)};
LPDIRECTDRAWSURFACE7 pDDS = ::CreateOffScreenSurface(pDD, dwWidth, dwHeight, true);

if(!pDDS)return NULL;

//ビットマップをファイルから読む
HBITMAP hBitmap = (HBITMAP)::LoadImage(NULL, tstrFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
BITMAP bitmap;
::GetObject(hBitmap, sizeof(bitmap), &bitmap);

//ビットマップデバイスコンテキストの作成
HDC hDCMem = ::CreateCompatibleDC(NULL);
HGDIOBJ hGdiObj = ::SelectObject(hDCMem, hBitmap);

//サーフェースデバイスコンテキストの作成(ビデオカードによってはVRAMから作成出来るが、SYSTEMメモリ側で行うのが無難)
HDC hDCSurface = NULL;
pDDS->GetDC(&hDCSurface);
::StretchBlt(hDCSurface, 0, 0, dwWidth, dwHeight, hDCMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);
pDDS->ReleaseDC(hDCSurface);

//ビットマップの解放
::SelectObject(hDCMem, hGdiObj);
::DeleteDC(hDCMem);
::DeleteObject(hBitmap);
return pDDS;
}
//DirectDrawSurfaceから矩形サイズを取る
static const RECT GetSurfaceRect(LPDIRECTDRAWSURFACE7 pDDS)
{
DDSURFACEDESC2 ddsd2 = {sizeof(ddsd2)};
ddsd2.dwFlags = DDSD_WIDTH | DDSD_HEIGHT;
pDDS->GetSurfaceDesc(&ddsd2);
const RECT rc = {0, 0, ddsd2.dwWidth, ddsd2.dwHeight};
return rc;
}
//スレッド
static DWORD WINAPI ThreadProc(LPVOID p)
{
DATA* pdata = (DATA*)p;
const DWORD dwStart = ::timeGetTime();
RECT rc = ::GetSurfaceRect(pdata->pDDSOffScreen);

//デスクトップの中央に来る様に座標x,yを計算する
const POINT pt = {(pdata->dwDesktopWidth - rc.right) / 2, (pdata->dwDesktopHeight - rc.bottom) / 2};

//一秒間回す
while(::timeGetTime() - dwStart <= 1000)
{
//VRAMに描写
pdata->pDDSScreen->BltFast(pt.x, pt.y, pdata->pDDSOffScreen, &rc, DDBLTFAST_WAIT);
}

return 0;
}
//お試し
int main(void)
{
DATA data = {NULL};
//デスクトップのサイズを計測する
HWND hWndDesktop = ::GetDesktopWindow();
HDC hDCDesktop = ::GetDC(hWndDesktop);
data.dwDesktopWidth = ::GetDeviceCaps(hDCDesktop, HORZRES);
data.dwDesktopHeight= ::GetDeviceCaps(hDCDesktop, VERTRES);
::ReleaseDC(hWndDesktop, hDCDesktop);

//DirectDrawの初期化
data.pDD = ::CreateDD();
data.pDDSScreen = ::CreateScreenSurface(data.pDD);
data.pDDSBitmap = ::CreateBitmapSurface(data.pDD, _T("test.bmp"), 640, 480);
data.pDDSOffScreen = ::CreateOffScreenSurface(data.pDD, 640, 480);

//SYTEM→VRAMへ複写
RECT rc = {0, 0, 640, 480};
data.pDDSOffScreen->BltFast(0, 0, data.pDDSBitmap, &rc, DDBLTFAST_WAIT);

//タイマ解像度の初期化
TIMECAPS tc = {0};
::timeGetDevCaps(&tc, sizeof(tc));
::timeBeginPeriod(tc.wPeriodMin);

//スレッドを回転させる
DWORD dwThreadID = 0;
HANDLE hThread = ::CreateThread(NULL, 0, &::ThreadProc, &data, CREATE_SUSPENDED, &dwThreadID);
::SetThreadPriority(hThread, THREAD_PRIORITY_LOWEST);
::ResumeThread(hThread);

//スレッドが落ちてくるまで待つ
::WaitForSingleObject(hThread, INFINITE);
::CloseHandle(hThread);

//デスクトップを書き直す
::InvalidateRect(NULL, NULL, NULL);

//COMの解放
::Destruct(data);

//タイマ解像度を戻す
::timeEndPeriod(tc.wPeriodMin);

return 0;
}
    • good
    • 0
この回答へのお礼

詳しい回答ありがとうございます。
DirectX環境構築して試してみます。

お礼日時:2009/05/18 14:27

試していないので出来るかどうかわからないのですが、


http://hp.vector.co.jp/authors/VA012320/directx6 …
でVRAMに直接アクセス可能のようですけど、詳しく見てないので分かりません。
(DirectXを使用しているみたいです。)

何らかのライブラリを使わないと、
難しいのではないかと思われます。

英語がある程度できるのであれば、
海外(アメリカ)サイトを探してみてはどうでしょうか?
    • good
    • 0

こんな感じのものでしょうか?


http://wisdom.sakura.ne.jp/system/winapi/win32/w …
もし違うなら無視してかまいません。

「別のウインドウに隠れることなく表示できて~」は、
もしかしたら出来ないかもしれません。
一応当方で試した結果出来ました。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
勉強になりました。
さらに欲を言いますと、ウインドウハンドルを持たず、VRAMに直接描画するような方法についても調べていました。メッセージフック関数に感知されない、描画したときにウインドウメッセージが流れないようにすることはできないですよね。

お礼日時:2009/05/15 23:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q塗装型枠とオーバーレイ型枠の違いを教えてください

現場でオーバーレイ型枠なんて言ったことないですが、今まではパネコートなんかの塗装型枠が広義な意味でのオーバーレイ型枠。
オーバーレイとしての手法が塗装された型枠かと思っていました。
しかしネットで色々見ていると「塗装型枠やオーバーレイ型枠・・・」の表現で分けて表記してあります。つまり塗装型枠とオーバーレイ型枠はどうも違うものだということになるようです。
さて、このオーバーレイ型枠とはどう言う型枠を指すのでしょうか?

Aベストアンサー

塗装方枠は表面は塗膜。
オーバーレイは樹脂を板(フィルム)状にしたものが積層(この積層を「プライ」ではなく「オーバーレイ」と考えてください)されている状態のもの。
貼るものはポリエステル樹脂や塩ビ樹脂ですね。
ポリ、塩ビの化粧合板だと考えればよいでしょう。

ですので見方を変えれば塗装型枠もオーバーレイ型枠の一種ということにはなります。
なので検索すると別けて書いているところと一緒にしているところがあるのでしょう。

QVC6 コントロールウインドウの表示

こんにちは、honiyonです。

 VC6を使用しています。
 ダイアログを作成中に誤って ボタンやスタティックテキスト等コントロールのリストが表示されているコントロールウインドウを閉じてしまいました。

 メニュー等を探しても、再び表示する為の操作が見つからず困っています。

 初歩的な質問でお恥ずかしいですが、表示させる方法を教えてください。
 宜しくお願いします(..

Aベストアンサー

こんにちは。

VC6のメニューから
ツール→カスタマイズ→ツールバータブを選択
で、コントロールをチェックしてください。

QG550の、オーバーレイ表示

MillenniumG550(バルク)は、オーバーレイ表示が可能らしいのですが、
表示できません。
(IO-DATAが配っている判定ソフトで、オーバーレイ不可になりました)
IOのサポートに電話をして聞く限りでは、PCのほうには問題ないらしいです。
OS:WIN2000
チップセット:i815
ビデオボード:G550
メモリ:512M
CPU:セレロン1400(自作完成品購入)

マルチモニタの2台目はオーバーレイに対応していないらしいが、現在モニタは1台のみで、マルチ(デュアル)の設定はしていません。
ハードウェアアクセレーターは最大にしないといけないとも言われたが、最大でもオーバーレイは不可でした。
解像度も、800*600から1280*1024まで試しましたがだめでした。
ドライバーは、G550付属のCDと、WINのアップデートの物と両方試したけれど、だめでした。
これ以上詳しいことは、製造メーカーや、販売店に問い合わせてほしいと言われけれど、バルクなので聞けなくてちょっと困ってます。

判定ソフトの判定の途中のエラー表示で、「プライマリサーフェスが、作成できません」と出ますが、私にはこの意味がわかりません。

G550で、オーバーレイ表示の仕方を教えてください。

オーバーレイ表示で何がしたいか?
IO-DATAの「GV-BCTV5/PCI」でTVとラジオの録画と録音がしたいと思ってます。

MillenniumG550(バルク)は、オーバーレイ表示が可能らしいのですが、
表示できません。
(IO-DATAが配っている判定ソフトで、オーバーレイ不可になりました)
IOのサポートに電話をして聞く限りでは、PCのほうには問題ないらしいです。
OS:WIN2000
チップセット:i815
ビデオボード:G550
メモリ:512M
CPU:セレロン1400(自作完成品購入)

マルチモニタの2台目はオーバーレイに対応していないらしいが、現在モニタは1台のみで、マルチ(デュアル)...続きを読む

Aベストアンサー

>MillenniumG550(バルク)は、オーバーレイ表示が可能らしいのですが

最近のボードでオーバーレイ表示ができないものはないです。ほかに原因がありそうですね。

原因として考えられるのは
1.ビデオカードの不良
2.ドライバーの不備、Matroxのサイトに言って入手
3.マザーとの相性
4.DirectXのバージョンがドライバーと合っていない。
5.チューナーボードとの相性

こんなところだと思います。
Matroxのサイトに行って、最新のドライバーで試してみるというのはどうでしょうか?

参考URL:http://www.matrox.com/mga/support/drivers/files/2kxp_586.cfm

Qマウスムーブでのマウスカーソル表示・非表示

いつもお世話になっております。
VS2005でC++を利用してWindowsアプリケーション作成を行っています。

マウスカーソルが一定時間動かなかったらマウスカーソルを非表示、
マウスカーソルが移動したらマウスカーソルを表示させる

このようなプログラムを作成したいと考えています。
今、ShowCursorでマウスカーソルの表示・非表示はできたのですが、
「マウスムーブが一定時間無かった場合」というのは
どのように調べたらよいのでしょうか。

ご教授お願いいたします。

Aベストアンサー

>あと3秒をチェックするのにif文を使っているため ==3 としていたのですが、それではできないのでしょうか。
きっちり動けば良いですが例えばイベント動作が遅れて
Timer関数走ったときの求めた時間秒数が
2・4のように変化していたら ==3 のチェックでは引っかかりませんよね
>=3でチェックすれば4でも引っかかりますよね
ということです

> =3 だとエラーが出てデバッグできません。
> を引用と見間違えられたかな? 比較式としての >= です
(今見たら確かに間違えそうだ)

#2さんへの補足についても一つ
>エラーはでずにデバッグできるのですがマウスカーソルの表示非表示はなりませんでした。
ShowCursor時間数の御理解がいまひとつのようです
TRUE・FALSEのパラメータでで一回呼べば表示・非表示になるという関数ではないのです
(前書いたURLの説明を再度お読みください)

内部にマウス表示のカウンターを持っていてそのカウント値が
負数だったとき初めて非表示0以上で表示と切り替わります
ですのでちゃんと動作させるためには関数の戻り値をチェックして
必要な回数分ShowCursor関数をコールし続けなければなりません
whie(ShowCursor(TRUE) >= 0 );
whie(ShowCursor(FALSE) < 0 );  のように

書いているコードではShowCursor(TRUE)は数回呼ばれる
可能性があるのにShowCursor(FALSE)は
一定時間経過後1回しか呼ばれません
その為非表示にならないのです

> CXX0017: エラーです: シンボル "ShowCursor" が見つかりません
これについてはどのような状況で出ているのか分からないので
なんともいえません

>あと3秒をチェックするのにif文を使っているため ==3 としていたのですが、それではできないのでしょうか。
きっちり動けば良いですが例えばイベント動作が遅れて
Timer関数走ったときの求めた時間秒数が
2・4のように変化していたら ==3 のチェックでは引っかかりませんよね
>=3でチェックすれば4でも引っかかりますよね
ということです

> =3 だとエラーが出てデバッグできません。
> を引用と見間違えられたかな? 比較式としての >= です
(今見たら確かに間違えそうだ)

#2さん...続きを読む

Qオーバーレイミキサー

オーバーレイミキサーとは何ですか?
動画の連続キャプチャをしようとしたところ、オーバーレイミキサーは使用できません。と出てきたのですが。

Aベストアンサー

オーバーレイ(ウィンドウ)とは、通常の2Dの壁紙処理とは別に、動画再生部分をビデオカードが直接処理する事で、再生パフォーマンスを上げる事を言います。
そして、オーバーレイミキサー(フィルタ)とは、そのオーバーレイウィンドウを使って表示させる機能の事です。

動画画面をキャプチャするなら、再生ソフト側の設定で、オーバーレイを無効にするか、オーバーレイ対応のキャプチャソフトを使用する必要があります。

Qウインドウを常に前に、常にアクティブに、サイズコントロール可能で、親ウインドウから出ないようにしたいのですが・・・

BCB5で、PhotoShopの情報パレットのような
マウス位置などの情報を表示するパレットを作成しています。
前回、「フォームに自作のプロパティを作ることは可能でしょうか?」という質問で
中身の動作については実装できたのですが、
またそれ以外に問題がでてきました。

1.パレットが、常にメインのウインドウよりも手前になければならない。
2.メインがアクティブになったり、パレットがアクティブになったりすると、
タイトルバーの色が変わって見た目にうるさいので、なんとかしたい。
Photoshopでは、常に両方とも(タイトルバーが)アクティブの色になっているので、そのようにしたい。
3.パレットのサイズをユーザーが変更したときに、
パレットの中身のコンポーネントもその比率で拡大・縮小させたい。
4.ユーザーがパレットを移動させても、メインのウインドウから外にでないようにしたい。
メインウインドウの端まで来たら、そこで移動をストップさせたい。

以上です。
1に関しては、今現在、FormStyleプロパティで「fsStayOnTop」に指定していますが
他に何か方法がありますでしょうか?
1~4の全てでも、一つずつでもかまいませんので、
よろしければ教えてください。
よろしくおねがいします。

BCB5で、PhotoShopの情報パレットのような
マウス位置などの情報を表示するパレットを作成しています。
前回、「フォームに自作のプロパティを作ることは可能でしょうか?」という質問で
中身の動作については実装できたのですが、
またそれ以外に問題がでてきました。

1.パレットが、常にメインのウインドウよりも手前になければならない。
2.メインがアクティブになったり、パレットがアクティブになったりすると、
タイトルバーの色が変わって見た目にうるさいので、なんとかしたい。
Photoshopでは...続きを読む

Aベストアンサー

BCB5のフォームを使った実装方法は(可能かどうかを含めて)わかりませんが
WindowsAPIでの実現方法なら

1.
常にウインドウを手前に表示したいのなら
CreateWindowExやSetWindowLongにおいて
WS_EX_TOPMOSTの属性をウインドウにつければ良いだけです。

2.
WinProcでWM_NCACTIVATEのとき0を返せばアクティブな状態を失う事はありません。

3.
実装方法は色々あります。例えば
ユーザーの変更があったときInvalidateRectでも実行してWM_PAINT内部で描画します。

4.マウスを動かすとWM_MOUSEMOVEが届くのでそのとき
ウインドウの位置をGetWindowRectで取得し
はみださないように制御すれば良いです。

Q動画再生でオーバーレイでなくてDXVA使う理由は何ですか

Vistaが低性能なPCでも動くオーバーレイを削除してGraphicBoad依存のDXVAメインにした理由は何ですか?

Aベストアンサー

昨年の今頃には既に情報が出ていましたが、AeroGlassがビデオオーバーレイを使うためです。
Aeroを使わなければ、ビデオオーバーレイでも良いですが、ユーザーインターフェースの描画パフォーマンスが低下するのはもちろんとして、3D Flipなども使えなくなります。

尚、性能という意味では、DirectShowを用いることができるDirectX Video Accelerationの方がAero対応のVistaPremiumのアップグレードターゲットとなっているShader2,0Model搭載のGPUでは性能が向上する確率が高くなります。これは、ATIのavivoやnVIDIAのPureVideo、IntelのClearVideoTechnologyなどの技術をDXVA内で完結サポートでき、CPU負荷を抑えることができるためです。ただ、機能の搭載が不完全な場合は、確かにOverlayの方が性能は安定します。

尚、既存のiDCT(逆離散コサイン変換)やMC(動き補償)、色変換などはこれまでもDXVA(DirectShowまたはDirectDraw)を用いていましたから、既存の製品に関しても極端に負荷が高まることは少ないでしょう。そもそも、大半のAero製品は上記のShaderおよび専用回路を用いた高度な動画再生支援を搭載していますから、DXVAでもそれほど支障はなく場合によっては、再生精度が上がる可能性が高くなります。

今後も考えれば、より映像処理はDXVAにシフトしていくでしょう。
尚、OverlayではソフトウェアがDXVAにも個別で浮気するか、独自にハードウェアに対応するPGを設計する必要があります。Vistaでは、その開発をDirectXである程度完結できるように整備しています。

これは悪く言えば、旧製品を切り捨てたと言えますが、良い意味で言えばソフトウェアの開発がし易くなり、さらに機能さえ満たしていれば動画再生時のパフォーマンスを高めることに繋がります。今後のためには良い判断といえるでしょう。

ちなみに、蛇足ですがグラフィックスボードは英語ではGraphics Boardと書きます。

参考URL:http://pc.watch.impress.co.jp/docs/2006/1204/hot458.htm

昨年の今頃には既に情報が出ていましたが、AeroGlassがビデオオーバーレイを使うためです。
Aeroを使わなければ、ビデオオーバーレイでも良いですが、ユーザーインターフェースの描画パフォーマンスが低下するのはもちろんとして、3D Flipなども使えなくなります。

尚、性能という意味では、DirectShowを用いることができるDirectX Video Accelerationの方がAero対応のVistaPremiumのアップグレードターゲットとなっているShader2,0Model搭載のGPUでは性能が向上する確率が高くなります。これは、ATIのavivoや...続きを読む

QVC++2008のWindowsフォームでWindowsAPIのウインドウを・・・

VC++2008のWindowsフォームアプリケーションで
WindowsAPIのウインドウを作って使いたいのですが、この場合どのようにすれば
普通にフォームアプリケーションに新しい子ウインドウを表示させる

Form^ a;
a->Show();

のように
メッセージループ(?)をさせる事が出来るのでしょうか?
WindowsAPIの解説サイトや本などを見ても、大抵はそれのみの解説のため、while文で自身に対してそうするだけでいいようなのですが

同じようにフォームアプリケーションの子ウインドウとしてやろうとすると、そうするだけでは当然メインフォーム側の操作が出来なくなってしまいます。

どのように実現したらいいのでしょうか?
また、そもそも上記のように普通に子ウインドウを作った場合は、どのように実現されているのでしょうか?

Aベストアンサー

 こんばんは。補足頂きました。
 う~む、wndproc.h と wndproc.cpp に分けると良さそうです。
 ヘッダーに実体を書いて複数回インクルードすると、 「1 つ以上の複数回定義されているシンボルが見つかりました。」と出てしまいます。関数のプロトタイプと実装は別々にします。
 また、同じ動きをするウィンドウを複数作成するならば、同一のプロシージャーを共有する事も出来ます。

 分割の仕方は以下を参考程度に。

wndproc.h
+-------------------------------------------------------------------------------------- 

#ifndef __WNDPROC_H__
#define __WNDPROC_H__

#include<windows.h>
#pragma comment(lib, "user32.lib")

extern LRESULT CALLBACK Win32ChildProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

#endif
--------------------------------------------------------------------------------------+
wndproc.cpp
+--------------------------------------------------------------------------------------
#include"wndproc.h"

LRESULT CALLBACK Win32ChildProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)//ココでメッセージを引っ掛ける
{
case WM_KEYDOWN:
{
//例えばキーが押された
}
}
return ::DefWindowProc(hWnd, uMsg, wParam, lParam);
}
--------------------------------------------------------------------------------------+

Form1のソース又はヘッダーファイルの一番上で、
#include"wndproc.h"
とする。此れで出来る筈。

 こんばんは。補足頂きました。
 う~む、wndproc.h と wndproc.cpp に分けると良さそうです。
 ヘッダーに実体を書いて複数回インクルードすると、 「1 つ以上の複数回定義されているシンボルが見つかりました。」と出てしまいます。関数のプロトタイプと実装は別々にします。
 また、同じ動きをするウィンドウを複数作成するならば、同一のプロシージャーを共有する事も出来ます。

 分割の仕方は以下を参考程度に。

wndproc.h
+------------------------------------------------------------...続きを読む

Qクローンディスプレイとオーバーレイ

ノートパソコンに同じ15インチの画面を繋げてクローンディスプレイにしようと思いました。しかし、ビデオボードsis m170のプロパティからクローンを設定すると繋げた方のディスプレイがかなりぼけたかんじになってしまいます。リフレッシュレートはどちらのモニタも同じなのに何故でしょうか?
あとオーバーレイは両方のモニタには効かないかもしれないとあったのですが、このオーバーレイとはどのような効果をもたらす機能なのでしょうか?同じものを表示するだけなのに何故できないのでしょうか?
ドライバは更新済みです。OSはXpです。

Aベストアンサー

>繋げた方のディスプレイがかなりぼけたかんじになってしまいます
液晶モニターなら、その液晶の解像度と異なる解像度で出力している為に、強制拡大されてるからでは?

>オーバーレイ
XPの通常の画面表示は2D処理でCPUが処理していますが、Windows表示での動画再生等の場合、画面全部を毎回処理してたんでは負担がかかるので、動画部分だけビデオカード側に処理を任せて独立表示させる事で、負荷を軽くする為の機能です。

>同じものを表示するだけなのに
クローン表示の場合、表示内容は同じでも、回路や処理は別々だからです。

QC言語でのマウスを移動とマウスクリック

C言語で指定の座標にマウスを移動させクリックさせるにはどうすれば良いでしょうか?
例えばX=200,Y=200にマウスを移動させクリックさせるにはどのようなコードを書けば良いでしょうか?
以上、宜しくお願い致します。

Aベストアンサー

標準Cライブラリにはマウスを扱う関数は無いでしょうから無理かと思われます。

WindowsやX-Window Systemなり使っているのであれば、そういうAPIがあるかも知れませんが。


人気Q&Aランキング

おすすめ情報