[MFC] 투명 윈도우 만들기

 

저작자 표시 비영리 동일 조건 변경 허락
신고

 

 

 

 

 

//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;

} 

////

저작자 표시 비영리 동일 조건 변경 허락
신고

 

이번에 소개 드리는 프로그램은 시리얼 포트(COM port)나 TCP/IP, UDP/IP 프로토콜로 데이터를 주고받을 수 있는 프로그램입니다. 시리얼이나 TCP, UDP 프로토콜로 통신하는 장비를 연결하는 프로그램을 작성하기 전에 프로토콜이 어떻게 동작하는지 간단히 테스트 하는 용도로 이 프로그램을 사용해 볼 수 있습니다. 그동안 제가 하이퍼터미널(hyperterm)이나 테라텀(TeraTerm)을 사용하면서 불편하게 생각했던 여러 기능들을 추가하여 만들었습니다. 아마도 저와 같은 각종 디바이스를 다루고 통신 프로토콜을 구현하는 개발자들에게 유용한 프로그램이 되지 않을까 합니다.

 

 

다음은 프로그램을 실행하고 [Connect] 버튼을 눌러 COM 포트로 연결한 그림입니다. 기본적으로 텍스트로 보여주면서 HEX를 선택할 경우 16진수로도 보여줍니다. 여기서 제가 가장 심혈을 기울인 부분은 ASCII 코드를 입력할 때 Escape sequence를 사용할 수 있도록 한 것입니다. 무슨 말인가 하면, 문자열 내에서 \n을 사용하여 줄바꿈 기능을 하는 제어 문자를 만드는 것을 말합니다. 이스케이프 시퀀스는 이것 말고도 몇 가지가 더 있으니 다음 페이지를 참고하시기 바랍니다: http://msdn.microsoft.com/en-us/library/h21280bw.aspx

그리고 한 가지 더 말하자면, 전송할 문자열을 입력할 때, ASCII 문자를 16진수 값으로 서로 변환하여 입력하는 기능입니다. 필요에 따라 16진수로 입력하거나 Escape sequence를 사용하는 ASCII 문자로 입력하면 됩니다. HEX와 ASCII 라디오 버튼을 누름에 따라 이 둘을 서로 번갈아 표시하기 때문에 입력되는 문자열을 더 잘 파악할 수 있습니다.

 

 

 

다음은 데이터를 보내기 위해 단축키를 설정하는 윈도우 입니다. 먼저 보내고자 하는 데이터를 적고 지연과 반복 횟수를 설정합니다. 그리고 단축키를 설정해두면, 다음 대화상자가 닫힌 상태에서도 단축키를 눌러 데이터를 보낼 수 있습니다.

 

 

 

 

이상입니다. 버튼과 컨트롤 들이 많아 좀 헷갈리지 않을까 하는 생각이 들지만, 그래도 나름 직관적으로 만든다고 만들었습니다. 혹시 조언이나 힌트, 버그레포트 주실 일이 있다면 댓글 부탁드립니다. ^^

 

Version 1.15 (2014.4.28) 

  1. 윈도우 7(32bit)에서 윈도우 크기 조정시 화면 업데이트가 되지 않는 문제 해결

  2. 단축키 메시지 편집 대화상자에서 [보내기]버튼을 누르거나 단축키를 누를 때마다 전송 상태가 토글 되도록 변경 

 

Version 1.14a (2014.4.22) 

  1. 윈도우 생성시 에러 발생하고 프로그램 중단되는 버그 수정 (확인 필요)

     - XP에서 실행하시는 분들께서 정상적으로 실행되는지 확인해 주시면 고맙겠습니다.

        제가 XP가 설치된 PC가 없어, 의심되는 부분을 수정만 하고 테스트는 해보지 못했습니다.

 

Version 1.14 (2014.4.12) 

  1. 최대화, 최소화 버튼 추가

  2. 윈도우 사이즈 조절 가능하도록 함

  3. 시리얼 통신 속도를 임의의 값으로 설정 가능하도록 함

 

Version 1.13 (2014.3.12)

  1. 송수신 문자열 표시줄 수가 제대로 적용되지 않던 bug fix

  2. 내부 코드 정리

 

Version 1.12 (2014.2.24)

  1. 화면 표시 메시지의 자동 줄바꿈 켜고 끌 수 있는 체크박스 추가

  2. 송수신 메시지 표시 켜고 끌 수 있는 체크박스 추가

  3. 송수신 메시지에 대한 시간 표시 방법을 선택할 수 있는 드롭 리스트 박스 추가

  3. 연결 중인 상황이 아닐 때 단축키에 의한 메시지 송신 되는 bug fix

  4. HEXA 보기에서 무조건 줄바꿈 되는 bug fix

 

Version 1.11 (2014.2.22)

  1. 설정사항 저장 방식 변경 (ini 파일이 2.10 버젼과 호환되지 않음, 설정사항 모두 리셋 됨)

  2. 설정 항목들 중 중복되는 내용들 없애고 간략화 함

  3. 키보드 이벤트 후킹 방식 변경

 

Version 1.10 (2014.2.18)

  1. 한글화

  2. 화면 표시 옵션 추가

 

Version 1.01 (2014.2.14)

  1. 단축키 1번이 제대로 저장되지 않는 bug fix

  2. 단축키 설정 대화상자 초기 실행 속도 개선

 

 

SerialPortMon.exeVersion 1.15  (Updated: 2014.4.28)

 

SerialPortMon.zip  Version 1.15  (Visual Studio 2008 / C++)

 

 

 

 

 

 출처 : http://blog.daum.net/pg365/276

저작자 표시 비영리 동일 조건 변경 허락
신고
 

 

private static void killps(string processName)

        {

 

            Process[] process = Process.GetProcessesByName(processName);

            Process currentProcess = Process.GetCurrentProcess();

            foreach (Process p in process)

            {

                if (p.Id != currentProcess.Id)

                    p.Kill();

            }

           

        }

 

저작자 표시 비영리 동일 조건 변경 허락
신고

[모든 공백을 없애기]

str.Replace( _T(" "), NULL );

 

[왼쪽 공백만 없애기]

str.TrimLeft( _T(" ") );

 

[오른쪽 공백만 없애기]

str.TrimRight( _T(" ") );

저작자 표시 비영리 동일 조건 변경 허락
신고

 

 

 

(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 > C/C++, C#' 카테고리의 다른 글

[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

                                    

주민등록번호 각 자리별 의미


12번째 코드는 보통 많아야 2~3이므로
4를 넘어가는 경우 조작된 주민등록번호 라는걸 알 수 있다.

 마지막 오류검증번호는 앞에 12자리를 이용하여 생성이 되고 그 공식은 아래와 같다.



예를들어 주민번호 7 8 0 9 2 5 - 1 3 2 4 0 1 1
위의 예를 들은 주민번호를 이용하여 계산해보면

2*7 + 3*8 + 4*0 + 5*9 + 6*2 + 7*5 + 8*1 + 9*3 + 2*2 + 3*4 +4*0 + 5*1 =186
186 / 11 = 16(몫) ----- 10(나머지)
11 - 10(나머지) = 1 (검증코드)

7 8 0 9 2 5 - 1 3 2 4 0 1 X 에서 X=1 라는 것입니다.

간단한 주민등록번호 생성, 검사 프로그램을 만들 수 있습니다~!!
하지만 에러검증코드가 결국 1~9이니 신뢰도가 낮은 웹사이트를 가입할때는
아무렇게나 적고 뒷자리만 적어주면되니 유용하게 사용하시길 바랍니다.

p.s
타인의 주민등록번호를 임의로 사용하면 '주민등록법'에 의해 3년 이하의 징역
또는 1천만 원 이하의 벌금이 부과될 수 있습니다.
관련법률_주민등록법 제37조(벌칙) 제10호 
저작자 표시 비영리 동일 조건 변경 허락
신고

'Computer Science > C/C++, C#' 카테고리의 다른 글

[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

C/C++ 컴파일러인 Dev-C,

Dev-cpp의 장점이라면 오픈소스로 gcc을 기반으로 계속해서 개발되고있고..

또한 GNU(General Public License)를 따르기에 무료로 사용하실 수 있습니다.
 
GNU는 UNIX Compatible Free Software를 제작해온 단체인데,

누구나 가입해서 자유롭게 프로그램을 만들 수 있습니다..

아래 링크에서 다운가능합니다.

http://sourceforge.net/projects/dev-cpp/files/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe/download

특별히 설치과정에서 어려운 부분은 없다.

한글을 선택해준다.


동의해주세요



입맛에 따라 선택하거나, 그냥 냅두셔도 상관없다.


설지할 폴더를 지정합니다.



설치끝..!! Turbo C보다는 이쁜(?) UI를 제공한다.




Visual c++보다 프로그램이 가벼워서 저사양컴에서도 부담이 없고요~
모두들 즐거운 코딩하실길 ㅎㅎ!!
저작자 표시 비영리 동일 조건 변경 허락
신고

'Computer Science > C/C++, C#' 카테고리의 다른 글

[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

티스토리 툴바