CString strText; 
CListBox *pListLog = (CListBox *)GetDlgItem(IDC_LIST_LOG);
int nIndex = pListLog->GetCurSel();

if (nIndex != LB_ERR)
{
       pListLog->GetText(nIndex, strText);
}

 

Ex)


void CDVSSystemServerView::OnLbnDblclkListLog()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.

CString strText; 
CListBox *pListLog = (CListBox *)GetDlgItem(IDC_LIST_LOG);
int nIndex = pListLog->GetCurSel();
if (nIndex != LB_ERR)
{
pListLog->GetText(nIndex, strText);

TCHAR szPath[_MAX_PATH + 1];
GetModuleFileName(AfxGetApp()->m_hInstance, szPath, _MAX_PATH);
CString strExePath = szPath;
int nLen = strExePath.ReverseFind('\\');
if (nLen > 0)
strExePath = strExePath.Left(nLen);

setlocale(LC_ALL, "korean");
CString strPath = strExePath + _T("\\ClickLog.txt");

CStdioFile file;
if (file.Open(strPath, CFile::modeCreate | CFile::modeWrite))
{
file.SeekToEnd();                       
file.WriteString(strText);     
file.Close();                           
}

ShellExecute(NULL,_T("open"),_T("notepad"), strPath, NULL,SW_SHOW);
}
}

'공부 > MFC_자주쓸거' 카테고리의 다른 글

[MFC] Queue 초기화  (0) 2023.03.22
[MFC] CStdioFile txt 파일 읽기 쓰기  (0) 2022.12.07
[MFC] 실행파일 경로  (0) 2022.12.07
[MFC] 파일 존재 여부 체크  (0) 2022.12.06
[MFC] 처리시간 체크  (0) 2022.09.16
// 실행파일이 존재하는 폴더 경로 반환
CString CSqlite3Manager::GetModulePath()
{
TCHAR szPath[MAX_PATH];
memset(szPath, 0x00, MAX_PATH);

::GetModuleFileName(NULL, szPath, MAX_PATH);

CString sTempPath = szPath;
int iLength = sTempPath.GetLength();
int iPos = sTempPath.ReverseFind(TCHAR('\\'));

CString sModulePath = sTempPath.Left(iPos);
sModulePath += _T("\\");
return sModulePath;
}

 

CFileFind find;
BOOL bRet = find.FindFile(_T("D:\\Text.txt"));
if (bRet)
{
//파일존재
}
else
{
//파일 없음
}

 

출처 : https://m.blog.naver.com/kyuhgmi/40130934218

std::vector<TestInfo> vec(std::begin(listTest), std::end(listTest));

 

ex

struct TestInfo
{
int nIndex;
int nTest;
TestInfo(int nIndex1,int nTest1)
{
nIndex = nIndex1;
nTest = nTest1;
}
};

std::list<TestInfo> listTest;
for (int i = 0 ; i < 100 ; i++)
{
listTest.push_back(TestInfo(i, i * 100));
}

std::vector<TestInfo> vec(std::begin(listTest), std::end(listTest));

 

//출처 : https://stackoverflow.com/questions/5218713/one-liner-to-convert-from-listt-to-vectort

Png 이미지 리소스에서 가져오기

 

// Based on afxbutton.cpp's static function ButtonLoadBitmap
HBITMAP __stdcall ButtonLoadBitmap(UINT uiBmpResId)
{
    if (uiBmpResId == 0)
    {
        return NULL;
    }

    LPCTSTR lpszResourceName = MAKEINTRESOURCE(uiBmpResId);
    ENSURE(lpszResourceName != NULL);

    HBITMAP hbmp = NULL;

    // Try to load PNG image first:
    CPngImage pngImage;
    if (pngImage.Load(lpszResourceName))
    {
        hbmp = (HBITMAP) pngImage.Detach();
    }
    else
    {
        HINSTANCE hinstRes = AfxFindResourceHandle(lpszResourceName, RT_BITMAP);
        if (hinstRes == NULL)
        {
            return NULL;
        }

        UINT uiLoadImageFlags = LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS;

        hbmp = (HBITMAP) ::LoadImage(hinstRes, lpszResourceName, IMAGE_BITMAP, 0, 0, uiLoadImageFlags);
    }

    return hbmp;
}

 

//출처 :  https://stackoverflow.com/questions/3005685/load-a-png-resource-into-a-cbitmap

CImage를 사용하기 위해서 #include <atlimage.h> 포함한다.


Cimage cimage;

HBITMAP hbitmap;

CBitmap cbitmap;


<CImage - > HBITMAP>

hbitmap = (HBITMAP)cimage;


<HBITMAP- > CImage >

cimage.attach(hbitmap);


<HBITMAP -> CBitmap>

CBitmap *bitmap = CBitmap::FromHandle(hbitmap);

 

<CImage -> CBitmap>

cbitmap = CBitmap::FromHandle(cimage);

//Assert 뜰때

CBitmap * cbitmap = CBitmap::FromHandle(cimage);

 

<CBitamp-> HBITMAP>

cbitmap.Attach(hbitmap); 

 

//출처 : https://m.blog.naver.com/ghoism51/220288053732

'공부 > MFC' 카테고리의 다른 글

[MFC] std::list 를 std::vector로 복사  (0) 2022.11.30
[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] 전체화면 사용  (0) 2022.11.24
[MFC] 다이얼로그 DLL 만들기  (0) 2022.11.16
[MFC] SDI 전체 화면  (1) 2022.09.23

M5Stack  ESP32 초기셋팅  방법

 

알리에서 구매 

 

지금은 가격이 올랐음 

 

https://ko.aliexpress.com/item/4000576823662.html?spm=a2g0o.order_list.0.0.21ef140fJlAVbR&gatewayAdapt=glo2kor 

 

출처

https://docs.m5stack.com/en/related_documents/Arduino_IDE

 

 

 

 

 

파일 - 환경설정
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

 



툴 > 보드 > 보드매니저 메뉴에서 M5 로 검색한 후 M5Stack 보드매니저를 설치


스케치 > 라이브러리 포함하기 > 라이브러리관리 메뉴에서 M5Stack 검색
M5Stack by M5Stack 라이브러리를 선택해서 설치

 

 

 

보드 선택

보드 - M5Stack Arduino - M5Stack - ATOM

 

업로드 완료

 

코드 작업 가능

 

'공부 > 개발보드' 카테고리의 다른 글

[개발보드] 아두이노 Mini D1 nRF24L01  (0) 2022.11.27

아두이노 Mini D1 친구한테 받은 보드 

 

RF 통신 설정 방법

 

 

 

아두이노 Mini D1  + nRF24L01

1.  기본설정

파일 환경설정 추가적인 보드 매니저 URLs 에 입력

http://arduino.esp8266.com/stable/package_esp8266com_index.json

스케치 라이브러리 포함하기 라이브러리 관리

Nrf24l01 검색

RF24 설치

 

보드매니저

Esp 검색   esp8266 설치  버전 3.0.1

 

 

보드 선택

D1 R2 & mini

 

 

2. 장치 연결

 

 

아두이노 핀배치

https://escapequotes.net/esp8266-wemos-d1-mini-pins-and-diagram/

데이터시트

https://components101.com/wireless/nrf24l01-pinout-features-datasheet

 

명칭 - GPIO번호 (핀번호)

//      CE    -    2 (D4)

//      CSN   -    15 (D8)

//      MOSI  -    13 (D7)

//      MISO  -   12 (D6)

//      SCK   -   14 (D5)

코드에서는 GPIO번호로 초기화

 

아두이노 연결 후 포트 확인

Com3 송신 Com5 수신 코드 업데이트

 

송신 코드

#include <SPI.h>
#include "RF24.h"
 
RF24 radio(2, 15);   //CE , SS
const byte address[6] = "00001";
 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
 
//보내는쪽
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.openWritingPipe(address); 
  radio.stopListening();
//
}
 
void loop() {
  // put your main code here, to run repeatedly:
  const char text[] = "nRF24l01 Send Test";
  radio.write(&text, sizeof(text));
  delay(1000);
}

수신코드

#include <SPI.h>
#include "RF24.h"
 
RF24 radio(2, 15);   //CE , SS
const byte address[6] = "00001";
 
void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
 
//받는쪽
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.openReadingPipe(1,address); //0 -> 1   
  radio.startListening();
//
}
 
void loop() {
  // put your main code here, to run repeatedly:
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
  }
}

 

 

동작

 

 

참고

https://www.youtube.com/watch?v=wPDX8vz1kiU

https://m.blog.naver.com/twophase/221132324612

 

 

 

'공부 > 개발보드' 카테고리의 다른 글

[개발보드] M5Stack ESP32 초기셋팅  (0) 2022.11.28

 

//출처 :  https://learn.microsoft.com/ko-kr/archive/blogs/pusu/how-to-add-full-screen-mode-in-your-mfc-app-visual-studio-2008-or-later

 

 

MFC SDI 사용시 전체화면 사용하고 싶을때 사용

화면 가득차게 됨

 

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
   ...

   EnableFullScreenMode(0);
   EnableFullScreenMainMenu(FALSE);
   ShowFullScreen();
}

 

 

// 단점 :  전체화면 닫기 툴바가 강제로 생김

 

 

//수정본 

 

기존 함수는  afxfullscreenimpl.cpp 의   void CFullScreenImpl::ShowFullScreen(CFrameWnd* pFrame)  함수에서 메뉴를 생성함

 

대충 그 생성부분

 

이부분이 없으면 전체화면 메뉴가 나타나지 않음

 

저부분만 따로 복사해서 클래스 생성하여 사용

 

MainFrm.h 에서  메뉴관련 모두 제거 

//CMFCMenuBar       m_wndMenuBar;
//CMFCToolBar       m_wndToolBar;
//CMFCStatusBar     m_wndStatusBar;

 

MainFrm.cpp 의 OnCreate에서 메뉴관련부분 모두 제거하고 마지막부분에

 

CFullScreenImplUser cFullScreen(0 , FALSE);
cFullScreen.ShowFullScreen(this);

 

추가

 

되돌리고 싶을때

 

cFullScreen.RestoreState(this);

 

 

FullScreenImplUser.cpp
0.01MB
FullScreenImplUser.h
0.00MB

'공부 > MFC' 카테고리의 다른 글

[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] CImage CBitmap HBITMAP 변환  (0) 2022.11.29
[MFC] 다이얼로그 DLL 만들기  (0) 2022.11.16
[MFC] SDI 전체 화면  (1) 2022.09.23
[MFC] unordered_map  (0) 2021.10.19

출처 : https://pencil1031.tistory.com/82

 

Visual Studio 2015 사용

 

1. dll프로젝트 생성

상단 메뉴바

파일 - 새로만들기 - 프로젝트
템플릿 - Visual C++ - MFC - MFC DLL 

DLL 프로젝트 명 : PopUpDialogDll

Dll 형식:
'MFC를 정적으로 링크한 기본 DLL' 선택
추가기능: 모두 체크해제

 


===============================================

2. 사용할 다이얼로그 생성

클래스 마법사 실행
 (ctrl + shift + x) 
또는 
 보기 - 클래스 뷰 - 클래스뷰에 프로젝트명 우클릭 - 클래스마법사 

클래스마법사 - 클래스 추가 - MFC 클래스 

클래스 이름 입력 (여기선 CDlgAlarm )
기본 클래스 CDialogEx 선택 마침

 


3. 코드 추가 
PopUpDialogDll.cpp 에서 BOOL CPopUpDialogDllApp::InitInstance 아래 함수 추가

#include "DlgAlarm.h"

void WINAPI ShowPopupTest()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

CDlgAlarm dlg;
dlg.DoModal();
}

 


PopUpDialogDll.def 에서  아래 항목 추가 @1은 순서 

EXPORTS
    ; 명시적 내보내기를 여기에 사용할 수 있습니다.
 ShowPopupTest @1


 4. 컴파일
 dll , lib 파일을 사용 프로젝트에 복사
실행파일 위치에도 복사

 

5. DLL을 사용할 프로젝트 생성

상단 메뉴바

파일 - 새로만들기 - 프로젝트
템플릿 - Visual C++ - MFC - MFC 응용프로그램 - 대화상자로 생성

 


stdafx.h 에 추가

__declspec(dllimport) void WINAPI ShowPopupTest();
#pragma comment(lib, "PopUpDialogDll")

 



리소스 뷰에 버튼하나 두고 버튼 이벤트에 추가
::ShowPopupTest();

 

 

 

=====================================

6. 실행화면

 

 

 

DllTest.zip
1.33MB

 

 

 

 

 

 

'공부 > MFC' 카테고리의 다른 글

[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] CImage CBitmap HBITMAP 변환  (0) 2022.11.29
[MFC] 전체화면 사용  (0) 2022.11.24
[MFC] SDI 전체 화면  (1) 2022.09.23
[MFC] unordered_map  (0) 2021.10.19

Microsoft Visual Studio Version Selector  으로 sln 파일 열기

 

 

 

제대로 인식하지 못할 경우에는 원하는 vs 버전으로 프로젝트 열고 sln  으로 다시 저장

 

 

기존 sln 삭제 후.vcxproj   파일을 원하는 vs버전으로 실행하고 저장 클릭시 sln 저장 할 수 있음

 

 

qt designer 실행

file - new - main window

Push Button 선택하여 원하는 위치 이동

objectName 입력  ex. pushButtonTest

                                ->코드에서 사용할 컨트롤 ID

 

test.ui로 저장  

main.py와 같은 경로에 파일 저장

 

 

pyqt5 설치

파일 - 설정

 

 

 

프로젝트_파이썬인터프리터 – add

 

pyqt5 검색  - 설치 ( install package클릭)

pyqt5designer 검색  - 설치 ( install package클릭)

 

터미널 설치 명령어

pip install pyqt5  
pip install pyqt5designer 

 

 

 

 

 

패키지 경로 확인

터미널 - python -m site 입력

 

 

코드입력

main.py 생성하여 코드 입력

import sys
from PyQt5 import uic
from PyQt5.QtWidgets import *

# ui 가져오기
form_class = uic.loadUiType("./test.ui")[0]   

class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self) 
        self.pushButtonTest.clicked.connect(self.btnClick)  #버튼 연결

    def btnClick(self):  #버튼클릭시 동작
        QMessageBox.information(self, 'click', '클릭')


if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = WindowClass()
    myWindow.show()
    app.exec_()

'공부 > 파이썬' 카테고리의 다른 글

[파이썬] 파이토치 설치  (0) 2024.09.20
[파이썬] 프로젝트 생성  (0) 2022.10.06
[파이썬] 설치  (0) 2022.10.06

File - New Project

 

상단 Location -  프로젝트 위치

New environment using - 새로운 환경 생성 

 Location - 새로운 환경 저장 위치

Inherit global site-packages - 기존 패키지 사용

Previously configured interpreter - 이전에 구성된 인터프리터 

 

처음에만 New environment 하고 이후로 Previously configured interpreter 이거 해서 사용했음

 

 

file - new - Python file 선택해서 파일명 입력 후 생성 

 

 

print("TESTTEST")

입력 후 클릭

 출력 확인

 

'공부 > 파이썬' 카테고리의 다른 글

[파이썬] 파이토치 설치  (0) 2024.09.20
[파이썬] qt designer 연결  (0) 2022.10.06
[파이썬] 설치  (0) 2022.10.06

파이썬 설치

https://www.python.org/downloads/

3.10.7 버전 설치  Download 클릭

64 비트 설치

 

 

 

Disable path length limit 클릭 - 닫

Cmd - python --version

 

 

 

 

파이참 설치

https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

 

Create Desktop Shortcut : 바탕화면 바로가기

Update context menu : 마우스 우클릭으로 PyCharm 프로젝트 열기

Create Associations :.py 확장자 연결

Update PATH variable (restart needed) : 윈도우 명령 프롬프트에서 파이참에 접근

 

qt deginer

다운받아서 그냥 설치

https://build-system.fman.io/qt-designer-download

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'공부 > 파이썬' 카테고리의 다른 글

[파이썬] 파이토치 설치  (0) 2024.09.20
[파이썬] qt designer 연결  (0) 2022.10.06
[파이썬] 프로젝트 생성  (0) 2022.10.06

Visual studio 2015에서 2022로 변경하면서

 

솔루션 탐색기에 항목을 클릭 할 때마다 창이 열리는 현상 발생

 

원래는 더블클릭해야 창이 열렸음

 

도구 - 옵션 - 환경 - 탭 및 창 - 미리보기 탭
솔루션 탐색기에서 선택한 파일 미리보기 (미리 보기를 표시하지 않으려면 Alt 키를 누른 채 클릭) (X) - 체크해제

 

해당 예제는  OnCreate 에서 CMFCToolBar  CMFCMenuBar  제거되어 있

 

게임의 전체화면 처럼 보임

EnableFullScreenMainMenu(TRUE);  //메뉴 보임

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
   ...

   EnableFullScreenMode(0);
   EnableFullScreenMainMenu(FALSE);
   ShowFullScreen();
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{

   ...
//모니터 해상도 수동입력 
cs.cx = 1920;
cs.cy = 1080;
//모니터 해상도 받아와서 입력
cs.cx = (int)GetSystemMetrics(SM_CXSCREEN);
cs.cy = (int)GetSystemMetrics(SM_CYSCREEN);
   ...

}


void CTestView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();

//기존항목 주석처리
//GetParentFrame()->RecalcLayout();
//ResizeParentToFit();

}

실행화면

그냥 실행시 

 

m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED); 사용시

 

위의코드 사용시

EnableFullScreenMainMenu(TRUE); 사용시

 

참고 :

https://learn.microsoft.com/ko-kr/archive/blogs/pusu/how-to-add-full-screen-mode-in-your-mfc-app-visual-studio-2008-or-later

http://www.tipssoft.com/bulletin/board.php?bo_table=QnA&wr_id=20748

 

'공부 > MFC' 카테고리의 다른 글

[MFC] png Image Load From Resource  (0) 2022.11.29
[MFC] CImage CBitmap HBITMAP 변환  (0) 2022.11.29
[MFC] 전체화면 사용  (0) 2022.11.24
[MFC] 다이얼로그 DLL 만들기  (0) 2022.11.16
[MFC] unordered_map  (0) 2021.10.19

도구 - 옵션 - 디버깅 - 일반 -

응용 프로그램에서 런타임 도구 표시   체크해제

 

사라짐

최상단에 추가 

//시간체크
#include < windows.h >
LARGE_INTEGER Frequency;
LARGE_INTEGER BeginTime;
LARGE_INTEGER Endtime;
#define CHECK_TIME_START QueryPerformanceCounter( &BeginTime );
#define CHECK_TIME_END QueryPerformanceCounter( &Endtime );
#define GET_TIME_SEC(a) QueryPerformanceFrequency(&Frequency); int64 elapsed = Endtime.QuadPart- BeginTime.QuadPart; a = float((double)elapsed / (double)Frequency.QuadPart );
#define GET_TIME_MSEC(a) QueryPerformanceFrequency(&Frequency); int64 elapsed = Endtime.QuadPart- BeginTime.QuadPart; a = float((double)elapsed / (double)Frequency.QuadPart * 1000.0);
//

사용

CHECK_TIME_START;
//동작
Sleep(500);
//
CHECK_TIME_END;
float fTime = 0.0;
GET_TIME_MSEC(fTime);

출처 : https://jangjy.tistory.com/95

기존 엑셀 함수

DEC2BIN(값, 자리수)  //자리수 : 빈자리를 0으로채워서 글자수 맞춰줌

=DEC2BIN(100)
결과 
1100100

=DEC2BIN(100,10)
결과 
0001100100

 

* 512부터는 #NUM! 값이 나타남

 

모듈 사용

Alt + F11

메뉴 - 삽입 - 모듈 - 아래 코드 붙여넣기 - 저장

Function decToBin(Dec As Long) As String

  Do
    decToBin = CStr(Dec Mod 2) & decToBin
    Dec = Dec \ 2
  Loop Until Dec = 0

End Function


Function binToDec(Bin As String) As Long

  For i = 1 To Len(Bin)
    binToDec = binToDec * 2 + CInt(Mid(Bin, i, 1))
  Next

End Function

=decToBin(512)
결과
1000000000

=decToBin(1000)
결과
1111101000

 

 

 

 

 

//출처 : https://mwultong.blogspot.com/2007/01/excel-vba-2-10-dec-to-bin-bin-to-dec.html

 

 CTime time = CTime::GetCurrentTime();
 CString str = time.Format("%Y년 %m월 %d일"); // %들은 포맷 종류 (아래 참고)
 AfxMessageBox(str);

//
CTime::GetCurrentTime().Format("%Y%m%d%H%M%S");

 

 

%y - 뒤 2자리 (09)

%Y - 전체 (2009)

 

%m - 01~12 (03)

%b - 영어 3글자 (Mar)

%B - 영어 전체 (March)

 

%d - 01~31 월 기준 (10)

%j - 001~365 년 기준 (069)

 

%H - 00~23 24시 기준 (14)

%I (대문자 아이) - 01~12 12시 기준 (02)

 

%M - 00~59 (12)

 

%S - 00~59 (15)

 

요일

%a - 요약 (Tue)

%A - 요일 (Tuesday)

%w - 일요일 0 기준 (2)

%U - 00~53 년기준으로 시작주 일요일 (10)

%W - 00~53 년기준으로 시작주 월요일 (10)

 

기타

%p - AM/PM (PM)

%x - 월/일/년 (03/10/09)

%X - 시:분:초 (14:12:15)

%c - 월/일/년 시:분:초 (03/10/09 14:12:15)
%% - % 기호 (%)

%z, %Z - 시간대 이름 (대한민국 표준시)

 

 

참고 : http://www.devlab.pe.kr/10

+ Recent posts