[MFC] 투명 윈도우 만들기

 

  1. 지나가던나그네 2019.06.04 10:10

    코드를 어디에 써야 하는지 안알려주셨어요 ㅠㅠ

 

 

 

 

 

//OnInitDialog 에서 처음실행할때 확인

HANDLE hEvent;

hEvent = CreateEvent(NULL, FALSE, TRUE, AfxGetAppName());         //어플이름으로 확인

if ( GetLastError() == ERROR_ALREADY_EXISTS) {

AfxMessageBox(_T("Already running.."));

exit(0) ;

}

 

 

 

 

//실행중인 어플 내부에서 프로그램 띄위기

SHELLEXECUTEINFO sei;

::ZeroMemory(&sei, sizeof(SHELLEXECUTEINFO));

 

sei.cbSize = sizeof(SHELLEXECUTEINFO);

sei.lpFile = _T("실행할 프로그램 주소~~~(e.g c:\test.exe");

sei.lpParameters = _T("");

sei.nShow = SW_SHOW;

sei.fMask = SEE_MASK_NOCLOSEPROCESS;

sei.lpVerb = _T("open");

 

DWORD result = :: ShellExecuteEx(&sei);

if(sei.hProcess != NULL)

{

::WaitForSingleObject(sei.hProcess, INFINITE);

}

 

 

/// 뮤택스를 이용한 중복실행방지

if(NULL == ::OpenMutex(MUTEX_ALL_ACCESS, FALSE, _T(STRING_MUTEX_NAME)))

{

// 중복실행이 아니므로 뮤택스 생성

m_hMutex = ::CreateMutex(NULL, FALSE, _T(STRING_MUTEX_NAME));

if(m_hMutex == NULL)

{

AfxMessageBox(_T("프로그램 실행에 실패하였습니다."), MB_OK|MB_ICONEXCLAMATION);

return FALSE;

}

}

else

{

// 중복실행일 경우 기존 열려있는 창을 맨 앞으로 보여줌

// 만약, 창이 최소화 상태라면 최소화 상태 해제

CWnd*  pWnd = NULL;

pWnd = CWnd::FindWindow(NULL, _T(STRING_CAPTION_NAME));

if(pWnd != NULL)

{

if(pWnd->IsIconic())

pWnd->ShowWindow(SW_RESTORE);

else   

pWnd->SetForegroundWindow();

}

else

{

pWnd = CWnd::FindWindow(NULL, _T(STRING_CAPTION_NAME));

if(pWnd != NULL)

{

if(pWnd->IsIconic())

pWnd->ShowWindow(SW_RESTORE);

else   

pWnd->SetForegroundWindow();

}

}

return FALSE;

} 

////

 

 

 

(Draw, Paint 사용가능)

 

HANDLE bmp;

CBitmap cBitmap;

BITMAP bmpinfo;

//CDC는 pDC

CDC memdc;

bmp = LoadImage(NULL, _T("DDR_Skin/button/bt_Loop.bmp"), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

cBitmap.Attach(bmp);

cBitmap.GetBitmap(&bmpinfo);

memdc.CreateCompatibleDC(pDC);

memdc.SelectObject(bmp);

//pDC->BitBlt(chkboxrect.left,chkboxrect.top,bmpinfo.bmWidth,bmpinfo.bmHeight, &memdc, 0,0,SRCCOPY);

pDC->TransparentBlt(chkboxrect.left, chkboxrect.top, bmpinfo.bmWidth, bmpinfo.bmHeight, &memdc, 0, 0, bmpinfo.bmWidth, bmpinfo.bmHeight, RGB(0,0,0));

 

 

 

memdc.DeleteDC();

cBitmap.DeleteObject();

함수

((CDDR3Dlg*)GetParent())->AdditemDrag(Itemcnt,AddDragPath);

 

변수

((CDDR3Dlg*)GetParent())->m_cnt = 1;

 

#include <TlHelp32.h>

 

BOOL Cex_ProcessKDlg::KillProcess(CString strName)

{

strName.MakeUpper();

HANDLE hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );

if ( (int)hSnapshot != -1 )

{

PROCESSENTRY32 pe32 ;

pe32.dwSize=sizeof(PROCESSENTRY32);

BOOL bContinue ;

CString strProcessName;

if ( Process32First ( hSnapshot, &pe32 ) )

{

do

{

strProcessName = pe32.szExeFile; //strProcessName이 프로세스 이름;

strProcessName = strProcessName.MakeUpper();

if( ( strProcessName.Find(strName,0) != -1 ) )

{                                        

HANDLE hProcess = OpenProcess( PROCESS_TERMINATE , FALSE, pe32.th32ProcessID );

if( hProcess )

{

DWORD dwExitCode;

GetExitCodeProcess( hProcess, &dwExitCode);

TerminateProcess( hProcess, dwExitCode);

CloseHandle(hProcess);

CloseHandle( hSnapshot );

return TRUE;

}

return FALSE;

}

bContinue = Process32Next ( hSnapshot, &pe32 );

} while ( bContinue );

}

CloseHandle( hSnapshot );

}

 

return FALSE;

}


[스크랩]

'Computer Science > Languages' 카테고리의 다른 글

[MFC] BMP 비트맵 투명 그리기  (0) 2015.02.23
[MFC] 부모 다이얼로그 함수 변수 호출  (0) 2014.11.18
[MFC] force shutdown process  (0) 2014.04.06
[C/C++] 주민등록번호 규칙  (0) 2010.12.31
Dev-C++ 4.9.9.2 , C/C++ Compiler  (0) 2010.12.01
요일구하는 공식  (0) 2010.11.28

+ Recent posts