void DisplayPopUpMenu(int menu){
//ウィンドウ位置取得
int x,y;
GetWindowPosition(&x,&y);
switch(menu){
case MAIN_POPUP:
{
TrackPopupMenu(mainPopUpMenu, TPM_LEFTALIGN,MousePosX+x, MousePosY+y, 0, mainWindowHandle, NULL);
}
その表示部分は↑のとおりです。
このプログラムは期待通りに動作しましたが、この関数は制御を戻してくれないので(BGM再生中などに右クリックすると困る)、別スレッドで呼ぼうとおもったんです。
改良後、
DWORD WINAPI DisplayPopUpMenuNewThread(LPVOID vdParam) {
//ウィンドウ位置取得
int x,y;
GetWindowPosition(&x,&y);
int value = TrackPopupMenu(mainPopUpMenu, TPM_LEFTALIGN,MousePosX+x, MousePosY+y, 0, mainWindowHandle, NULL);
DWORD err = (GetLastError());
return -1;
}
HANDLE popUpThread;
void DisplayPopUpMenu(int menu){
switch(menu){
case MAIN_POPUP:
{
//クリックした場所に表示。
DWORD thID = NULL;
popUpThread = (HANDLE)CreateThread(NULL,0,DisplayPopUpMenuNewThread,NULL,0, &thID);
}
こんな感じになったんですが、ポップアップメニューが表示されませんでした。
GetLastErrorで取得したエラーコードは、err = 87 となり、エラー内容、パラメターが正常ではないとのことなんですが、特に間違っているところがみあたりません。
(value = 0 でした。これはエラー発生を意味します。)
そもそも、別スレッドで、ポップアップメニューを呼ぶのは反則だということなのでしょうか。。。。?
