DXライブラリにタスクトレイにアイコンを登録する専用の機能はありませんが
Win32API を直接使用することでご希望の処理を実現することは可能です
最小化ボタンが押されたらタスクトレイにソフトのアイコンが表示され、
ウインドウ自体はタスクバーから消え、タスクトレイに登録したアイコンをクリックしたら
ウインドウが再度表示されるというサンプルプログラムを組んでみましたので、
よろしければご覧ください m(_ _)m
#include "DxLib.h"
// タスクトレイアイコン用のメッセージ値を保存する変数
UINT g_iTrayMsg ;
// 0:通常表示状態
// 1:非表示状態
// 2:元に戻す処理を行う
int g_WindowState ;
// タスクトレイにアイコンを追加する
void AddTrayIcon( void )
{
NOTIFYICONDATA icndata;
// 構造体初期化
memset( &icndata, 0, sizeof( icndata ) ) ;
icndata.cbSize = sizeof( icndata ) ;
// メインウィンドウのハンドルをセット
icndata.hWnd = GetMainWindowHandle() ;
// アイコンをセット
icndata.hIcon = LoadIcon( NULL, IDI_APPLICATION );
// システムトレーからの通知メッセージをセット
icndata.uCallbackMessage = g_iTrayMsg ;
// フラグをセット
icndata.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP ;
// アイコンを追加
Shell_NotifyIcon( NIM_ADD, &icndata ) ;
}
// タスクトレイに追加したアイコンを削除する
void RemoveTrayIcon( void )
{
NOTIFYICONDATA icndata;
// 構造体初期化
memset( &icndata, 0, sizeof( icndata ) ) ;
icndata.cbSize = sizeof( icndata ) ;
// メインウィンドウのハンドルをセット
icndata.hWnd = GetMainWindowHandle() ;
// アイコンを削除
Shell_NotifyIcon( NIM_DELETE, &icndata ) ;
}
// タスクトレイに登録したアイコンのメッセージを処理するためのプロージャ
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
// タスクトレイに登録したアイコンのメッセージのみ処理する
if( msg == g_iTrayMsg )
{
// 左クリックがされたら処理する
if( lParam == WM_LBUTTONUP )
{
// ウインドウを表示状態に戻す
ShowWindow( GetMainWindowHandle(), SW_RESTORE ) ;
// ウインドウの状態を表示状態に戻す処理を行う状態にする
g_WindowState = 2 ;
}
}
return 0;
}
// WinMain
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
// ウインドウモードで起動
ChangeWindowMode( TRUE ) ;
// 非アクティブになっても処理を止めないようにする
SetAlwaysRunFlag( TRUE ) ;
// DXライブラリの初期化
if( DxLib_Init() < 0 ) return -1 ;
// 描画先を裏画面にする
SetDrawScreen( DX_SCREEN_BACK ) ;
// タスクトレイアイコンのメッセージ処理用のプロージャをセットする
SetHookWinProc( WndProc ) ;
// タスクトレイに登録するアイコンのメッセージ値を取得する
g_iTrayMsg = RegisterWindowMessage( "DxLibIconNotify" ) ;
// メインループ
while( ProcessMessage() == 0 )
{
// 画面のクリア
ClearDrawScreen() ;
// 四角形を描画
DrawBox( 0,0,128,128,GetColor(255,255,255), TRUE ) ;
// ウインドウの状態によって処理を分岐
switch( g_WindowState )
{
case 0: // 通常表示状態
// 通常表示状態中に最小化されたら、ウインドウを非表示にしてタスクトレイにアイコンを追加する
if( GetWindowMinSizeFlag() )
{
// ウインドウを非表示にする
ShowWindow( GetMainWindowHandle(), SW_HIDE ) ;
// タスクトレイにアイコンを追加
AddTrayIcon() ;
// 非表示状態
g_WindowState = 1 ;
}
break;
case 2: // 元に戻す処理を行う
// タスクトレイからアイコンを削除する
RemoveTrayIcon();
// ウインドウを前面に表示する
SetForegroundWindow( GetMainWindowHandle() ) ;
// 通常表示状態に設定する
g_WindowState = 0 ;
break;
}
// 裏画面の内容を表画面に反映
ScreenFlip() ;
}
// DXライブラリの後始末
DxLib_End() ;
// ソフトの終了
return 0 ;
}