開発環境はWindows7,C++,DXライブラリです。
特定の座標を左クリックすると日付や時刻を
音声再生するのですが
ウィンドウプロシージャの下記のコードに影響されて
音声を再生できません。
左クリックでウィンドウを移動させるものなのですが。
case WM_LBUTTONDOWN:
SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
break;
出来なくなりますが音声は再生できます。
メッセージの送信方法を変えれば解決できるでしょうか?
ご助力の程、よろしくお願い致します。
//main.cpp
#include <windows.h>
#include <process.h>
#include <WindowsX.h>
#include "DxLib.h"
#include "dayData.h"
#include "draw_clock.h"
#include "Setup.h"
#include "resource.h"
#include <windowsx.h>
#define APP_NAME TEXT("clock")
#define chara_width 64
void jihou(struct dayData* day);
void plan(struct dayData* day);
void Time(struct dayData* day);
void date(struct dayData* day);
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK MyDlgProc(HWND hChild, UINT msg, WPARAM wp, LPARAM lp);
static HWND hDlg[2];
static int chara_id;
HINSTANCE hInst;
POINT pt;
struct dayData day[471];
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
static int top = 0;
HMENU hMenu,hSubMenu;
switch(uMsg) {
case WM_MOVING:
{
LPRECT p = (LPRECT)lParam;
top = p -> top;
break;
}
case WM_WINDOWPOSCHANGING:
{
WINDOWPOS* p = (WINDOWPOS*)lParam;
p -> y = top;
break;
}
case WM_NCHITTEST:
return HTCAPTION;
case WM_LBUTTONDOWN:
SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
break;
case WM_RBUTTONDOWN:
pt.x = LOWORD(lParam);
pt.y = HIWORD(lParam);
hMenu = LoadMenu(hInst,"MYMENU");
hSubMenu = GetSubMenu(hMenu ,0);
ClientToScreen(GetMainWindowHandle() , &pt);
TrackPopupMenu(hSubMenu,TPM_LEFTALIGN,pt.x,pt.y,0,GetMainWindowHandle(),NULL);
DestroyMenu(hMenu);
break;
case WM_COMMAND:
switch(LOWORD(wParam)){
case IDM_OPTION:
if(!hDlg[0])hDlg[0] = CreateDialog(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG), GetMainWindowHandle(), MyDlgProc);
break;
case IDM_EXIT:
SendMessage(hWnd, WM_CLOSE, 0, 0);
break;
case IDM_VERSION:
ShellAbout(hWnd,"DesktopClock#""DesktopClock Ver1.00","Copyright(C) 2012 S.Ohira",NULL);
break;
}
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
if(FindWindow(APP_NAME , NULL) != NULL ){
MessageBox(NULL , TEXT("多重起動を確認しました") , NULL , MB_OK);
return 0;
}
// マウス状態管理用変数
int nClickNow = 0 , nClickPrev = 0;
int nClickNow_R = 0 , nClickPrev_R = 0;
int nClickR_Count = 0;
int status = 0,temp = 0;
bool menu_flg = false;
// 画面モードの変更
SetGraphMode( 1680 , 1050 , 32 ) ;//パソコンの解像度に合わせる
SetMainWindowText("clock");
ChangeWindowMode( TRUE );
// SetWindowText( "DxLib:" DXLIB_VERSION_STR );
SetUseBackBufferTransColorFlag( TRUE );// ウインドウの透過色モードON
SetWindowStyleMode(2);
SetAlwaysRunFlag( TRUE );
SetHookWinProc( WindowProc );
if ( DxLib_Init( ) == -1 ) return -1;
SetDrawScreen(DX_SCREEN_BACK);
Load_Graph();
Setup_load(day);//設定を読み込む
plan(day);//予定を音声再生する
while ( ProcessMessage( ) == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
ClearDrawScreen( );
draw_face(day);
draw_clock(day);
// マウス状態の更新
nClickNow = (GetMouseInput() & MOUSE_INPUT_LEFT);
if( nClickNow != nClickPrev){
int MouseX = 0,MouseY = 0;
GetMousePoint( &MouseX , &MouseY ) ;// マウスの位置を取得
if(MouseX > chara_x && MouseX < chara_x + chara_width && MouseY > chara_y && MouseY < chara_y + chara_width ){
date(day);//日付を再生
Time(day);//時刻を再生
plan(day);
}
}else{
//SendMessage(GetMainWindowHandle(), WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
// 今回のクリック状態を保持する
nClickPrev = nClickNow;
jihou(day);//全ての描画関数が終わってから呼ぶ
ScreenFlip( );
}
DxLib_End( );
return 0;
}