|
http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6492 [복사]
win32 console application 인데요,
아직 미완성 프로그램인데 간단하게 설명드리면
똥피하기 게임 만들려고하는데,
콘솔창 띄우고 창 제목을 game.exe 로 만들고 이 윈도우의 핸들값을 'handle' 변수에 저장합니다. 이 경우 현재 열린 콘솔 창의 핸들값이 'handle' 변수에저장되겠죠.
그다음 BGM 으로사용할 파일
c:/test/MainBGM.mp3 을 실행 시킵니다.
이떄 윈도우의 포커스가 실행시킨 mp3 파일로 잡히는데,
제가 원하는건 BGM 실행된 후 게임을 플레이할 윈도우(처음에 띄운 콘솔) 로 포커스가 자동으로 잡히게 하는것입니다.
그래서
BringWindowToTop 함수를 사용해서
BringWindowToTop(handle); 로 처음에 띄운 콘솔로 윈도우 포커스가 잡히게 하고싶어서 다음과 같이 프로그래밍했습니다. 그런데 포커스가 BGM 에서 콘솔창으로 바뀌지가 않습니다.
컴파일시 오류도 없습니다.
테스트 해보실꺼면 BGM 경로를 답변자님 컴퓨터의 mp3 파일 경로로 바꿔서 해주세요,
(게임에 BGM 삽입과, BGM 재생되는 프로그램 최소화 하려고 인터넷으로 여러가지 방법 찾아보면서 시도해봐서 필요없는 헤더가 많지만 무시해주세요.. )
여기까지 상황 설명이었고, 질문을 요약하면
1. 콘솔창으로 윈도우 포커스를 바꾸고 싶어서 다음과 같이 프로그래밍했는데 원하는데로 동작하지 않습니다. 제가 뭘 잘못한 걸까요? (컴파일시 오류 없음);
2. BGM 이 재생되는데 이 윈도우를 최소화 시키고싶습니다. 어떻게 하면 좋을까요 ? (처음부터 최소화 상태로 실행 | 실행후 최소화);
// 검색을 통해 API 함수인
1.
PostMessage(hWnd,WM_SYSCOMMAND,(WPARAM)SC_MINIMIZE,0); //최소화시키는 메시지 발생 (WM_SYSCOMMAND 메시지의 SC_MINIMIZE)
2.
ShowWindow(hWnd,SW_HIDE); //HIDE모드로 윈도우를 보여줌 -> 최소화
3.
CloseWindow(hWnd); //닫다 (최소화)
4.
SetWindowPos(hWnd,NULL,0,0,0,0,SWP_HIDEWINDOW); //나머지는 바탕화면DC얻고 캡쳐하면 찍히던데 이건 제대로 숨네요
//핸들,해당윈도우앞에있기,x,y,폭,높이,옵션
등을 사용하려고 시도해봤지만, 여러 창이 열려있는 환경에서 특정 창의 핸들을 구하고, 그 핸들을 사용하여 최소화 시키려고 시도해봤지만 제 실력으론 아직 무리인것같습니다.. 혹시 가능하면 main 함수에 삽입할수있게 창 최소화하는 함수 만들어주시면 감사하겠습니다 ㅠㅠ)
코드
-------------------------------------------------------------------
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<TlHelp32.h>
#include<process.h>
#include <tchar.h>
#include <WinUser.h>
void gotoxy(int x, int y);
void Map();
void BGM();
void main()
{
system("title game.exe");
HWND handle = GetForegroundWindow();
system("c:/test/MainBGM.mp3");
system("cls");
BringWindowToTop(handle);
/*유저 시작 위치*/
int x = 13;
int y = 20;
int chr=0;
system("title game.exe");
system("color F0");
/*MAP*/
char map_area[25][20];
system("mode con: cols=40 lines=25");
Map();
while( 1 )
{
// 게임 맵 구현
if (kbhit())
chr = getch();
if (chr == 0 || chr == 0xe0)
{
gotoxy(x, y);
printf(" ");
chr = getch();
if (chr == 72){ //상
y--;
// map 탈출 방지
if (y < 1)y = 1;
}
else if (chr == 80){ //하
y++;
//map 탈출 방지
if (y > 20)y = 20;
}
else if (chr == 75){ //좌
x--;
//map 탈출 방지
if (x < 1)x = 1;
}
else if (chr == 77){ //우
x++;
//map 탈출 방지
if (x > 25) x = 25;
}
gotoxy(x, y);
printf("*");
}
}
}
void gotoxy(int x, int y)
{
COORD Pos = { x, y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void BGM()
{
system("start c:/test/MainBGM.mp3");
HWND hWnd = FindWindow(NULL, TEXT("Wind"));
if(hWnd)
{
//ShowWindow(hWnd, SW_MINIMIZE);
}
}
void Map()
{
int i;
//게임 Map 출력
system("chcp 437"); // 확장 아스키 코드 출력
gotoxy(0,0);
for(i=0; i<25; i++)
{
printf(" ");
}
printf("\n");
gotoxy(0,0);
printf("%c\n", 0xDA);
gotoxy(26,0);
printf("%c\n", 0xBF);
gotoxy(0,21);
printf("%c\n", 0xC0);
gotoxy(26,21);
printf("%c\n", 0xD9);
for(i=1; i<21; i++)
{
gotoxy(0,i);
printf("%c\n", 0xB3);
gotoxy(26,i);
printf("%c\n", 0xB3);
}
gotoxy(1,0);
for(i=1; i<26; i++)
{
printf("%c", 0xC4);
}
gotoxy(1,21);
for(i=1; i<26; i++)
{
printf("%c", 0xC4);
}
gotoxy(27,1);
printf(" LEVEL");
gotoxy(27,3);
printf(" SCORE");
gotoxy(27,5);
printf(" LIFE ");
}
----------------------------------------------------------------------------
|
Hit : 11437 Date : 2014/11/18 09:29
|