https://balabala.tistory.com/44?category=947457 
 

[MFC] 채팅 프로그램 - 서버 (1/3)

- 설명 - 프로젝트 명 : ChatServer(대화 상자) ① CSocket 클래스 이용 : 동기식(블로킹)으로 동작 ② 서버 클라이언트 1:1 통신 ③ 해당 글은 서버용 채팅 프로그램 만드는 법 설명 1. MFC 애플리케이션

balabala.tistory.com


[따라하다가 안되던 부분들]

2. 다이얼로그 디자인 및 ID

 

형식을 CString 으로 하니 에러가 나서 CEdit, CStatic으로 변경했다. 

Control을 다루는 부분도 형식에 따라서 변경했다.

그림3. 멤버변수 설정

10. [전송] 버튼 클릭 메시지 함수 작업

위 작업에 따라서 메세지 함수 소스 코드 변경

void CChatServerDlg::OnBnClickedButtonSend()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	UpdateData(TRUE);
	char pTmp[256];
	CString strTmp, strText;
	CStringA strTextA;

	m_strSend.GetWindowText(strText);

	strTextA = CStringA(strText);

	// pTmp에 전송할 데이터 입력
	memset(pTmp, '\0', 256);
	memcpy(pTmp, strTextA.GetBuffer(), strTextA.GetLength());
	m_strSend.Clear();

	// 전송
	m_socCom->Send(pTmp, 256);

	// 전송한 데이터도 리스트박스에 보여준다.
	strTmp = pTmp;
	int i = m_list.GetCount();
	m_list.InsertString(i, strTmp);

	UpdateData(FALSE);
}

 

 

https://badayak.com/category/%EC%BB%B4%ED%93%A8%ED%84%B0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D?page=3 

 

'컴퓨터/프로그래밍' 카테고리의 글 목록 (3 Page)

생활 속에서 컴퓨터·모바일 기기를 편리하게 사용하는 방법과 IT 소식을 소개합니다.

badayak.com

 

'Study' 카테고리의 다른 글

Git 시작하기  (0) 2022.04.29

https://eachan.tistory.com/6

 

GDI+를 이용한 더블 버퍼링

지금까지 찾아본 GDI+ 더블 버퍼링 코드를 보면 거의 비슷한 내용이지만 구현하는 방법이 조금씩 달라서 도대체 어떤 것을 써야할지 헷갈리는 경우가 있다. 이럴 경우를 위해서 본인이 현재 쓰는

eachan.tistory.com

.

http://www.tipssoft.com/bulletin/board.php?bo_table=update&wr_id=982 

 

팁스소프트 > 팁스웨어 자료실 > [소스] 좌표 확대 및 축소하기 (맵핑 모드 미사용)

[소스] 좌표 확대 및 축소하기 (맵핑 모드 미사용)  글쓴이 : 관리자   트랙백 주소 : http://www.tipssoft.com/bulletin/tb.php/update/982    TransferCoordinate-Step1.zip (32.9K) [42] DATE : 2009-09-23 13:56:03   팁스소프

www.tipssoft.com

 

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한 사항
  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

입출력 예

[2,6,8,14] 168
[1,2,3] 6

최대공약수

<유클리드 호제법>

2개의 자연수의 최대공약수를 구하는 알고리즘.

2개의 자연수 a,b에 대해서 a를 b로 나눈 나머지를 c라고 하면(단,a>b), a와 b의 최대 공약수는 b와 c의 최대공약수와 같다. 이 성질에 따라, b를 r로 나눈 나머지를 구하고, 이 과정을 반복하여 나머지가 0이 되었을때 나누는 수가 a와 b의 최대공약수이다.  

int GCD(int a, int b)
{
	int c;
	while (b != 0)
	{
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}

 

최소공배수

a * b = GCD(a, b) * LCM(a, b)

-> LCM(a,b) = GCD(a,b) / a*b

int LCM(int a, int b)
{
	return a * b / GCD(a, b);
}

코드

//최대 공약수
int GCD(int a, int b)
{
	int c;
	while (b != 0)
	{
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}

//최소 공배수
int LCM(int a, int b)
{
	return a * b / GCD(a, b);
}

int solution(vector<int> arr) 
{
	int answer = arr[0];

	for (int i = 1; i < arr.size(); i++)
	{
		answer = LCM(arr[i], answer);
	}
	return answer;
}

https://luckygg.tistory.com/233

 

[MFC] Dynamic Layout 적용하여 컨트롤 Resizing하기(예제 포함)

소개 Visual Studio 2015 MFC에는 동적 레이아웃(Dynamic Layout) 기능이 추가되었습니다. 이 기능은 Dialog의 Resizing에 따라 자동으로 Control들의 크기가 조정되는 것을 의미합니다. 아래 애니메이션을 보면..

luckygg.tistory.com

 

방법 ①  ShowWindow함수 사용

//OnInitDialog() 부분에 추가하면 된다.

 

원형 : BOOLL_stdcall ShowWindow(HWND hWnd, int nCmdShow);

설명 : 지정된 윈도우의 표시 상태를 설정한다.

반환 : 성공여부를 반환한다.

매개변수 

 - HWND hWnd : 대상 윈도우 핸들

 - nCmdWhow : 지정하고자 하는 보이기 상태. 이 값에 따라 최소화, 최대화 혹은 보통 상태로 시작

 

SW_SHWO : 윈도우를 활성화하며 보인다.

SW_SHOWMAXMIZED : 윈도우를 최대화된 상태로 활성화 한다.

SW_SHOWMINMIZED : 윈도우를 최소화한 상태로 활성화 한다.

SW_HIDE : 윈도우를 숨긴다.

SW_SHOWNOACTIVATE : 최근 크기와 위치에 윈도우를 보이며 활성화 상태는 변경되지 않는다.


방법 

//OnInitDialog() 부분에 추가하면 된다.

-> 제목 표시줄 삭제

LONG style = ::GetWindowLong( m_hWnd, GWL_STYLE );

style &= ~WS_CAPTION;
style &= ~WS_SYSMENU;

::SetWindowLong( m_hWnd, GWL_STYLE, style );
int screenx = GetSystemMetrics( SM_CXSCREEN );
int screeny = GetSystemMetrics( SM_CYSCREEN );

// resize:
SetWindowPos( NULL, -4, -4, screenx+8, screeny+4, SWP_NOZORDER );

출처 : https://gdnn.tistory.com/117

출처 : https://godtory.tistory.com/27

출처 :https://pkss.tistory.com/entry/%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EC%A0%84%EC%B2%B4%ED%99%94%EB%A9%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0

[스택, 큐, 트리, 힙]

  • 스택: 먼저 넣게 되는 자료가 마지막으로 나오게 되는 First-In Last-Out(FILO) 구조이다. 데이터가 들어가고 나오는 입구가 하나뿐이므로 입구로 들어간 데이터가 스택에 차곡차곡 쌓여있다가 들어간 반대 순서로 나온다. 마지막에 들어간 원소가 처음에 나온다.
  • 큐: 먼저 넣게 되는 자료가 가장 먼저 나오는 First-In First-Out(FIFO) 구조이다.
  • 트리: 정점과 간선을 이용해 사이클을 이루지 않도록 구성한 Graph의 특수한 형태로, 계층이 있는 데이터를 표현하기에 적합하다.
  • 힙: 최댓값 또는 최솟값을 찾아내는 연산을 쉽게 하기 위해 고안된 구조로, 각 노드의 키값이 자식의 키값보다 작지 않거나(최대힙) 그 자식의 키값보다 크지 않은(최소힙) 완전이진트리이다.

 

[리스트/벡터 차이]

  • 벡터는 메모리가 연속적으로 되어 있어 읽는 속도가 빠르지만 맨뒤를 제외한 모든 곳의 삽입삭제는 밀고 당기는 비용이 발생
  • 리스트는 불연속적으로 나열되어 있어 읽는 속도는 벡터보다 느리지만 지점을 찾아 연결된 링크만 수정하면 되어 삽입삭제가 효율적입니다. 

 

버블소트, 셀렉소트, 머지소트, 퀵소트 ]

  • 버블소트는 서로 인접한 두 원소를 비교하여 정렬하는 알고리즘입니다. 0번 인덱스부터 n-1번 인덱스까지 n번까지의 모든 인덱스를 비교하며 정렬합니다. 시간복잡도는 O(n2)입니다.
  • 셀렉소트는 원소를 넣을 위치를 정해두고 어떤 원소를 넣을지 선택하는 알고리즘입니다. 첫번째 자료를 두번째 자료부터 마지막 자료까지 차례대로 비교하여 가장 작은 값을 찾아 첫번째에 놓고, 두번째 자료를 세번재 자료부터 마지막 자료까지 차례대로 비교하여 그 중 가장 작은 값을 찾아 두번재에 놓고 ... 이러한 과정을 반복하여 정렬을 수행한다. 시간복잡도는 O(n2)입니다.

 

[BST(Binary Search Tree)]

  • 이진탐색트리는 데이터의 삽입, 삭제, 탐색 등이 자주 발생하는 경우에 효율적인 구조로, 이진 트리이면서 같은 값을 갖는 노드가 없어야한다.
  • 왼쪽 서브 트리에 있는 모든 데이터는 현재 노드의 값보다 작고, 오른쪽 서브 트리에 있는 모든 노드의 데이터는 현재 노드의 값보다 크다. 즉, 정렬이 되어있어야 한다.

 

'기타 > 면접준비' 카테고리의 다른 글

기술 면접 #1 [프로그래밍기본]  (0) 2021.11.07

+ Recent posts