반응형

 

13단계로 HTML 웹페이지에 채팅 기능 추가하는 방법


 

# 사전 준비

(Github page 사용하는 방법 링크 - 작성예정)


 

# 채팅 기능 추가하는 방법

1. tawk 홈페이지 접속 (https://www.tawk.to/)

2. 로그인 (회원가입 필요)
- "SIGN UP FREE " 버튼을 클릭하여 간단한 회원가입을 함



 

3. 이메일 확인 (계정 활성화)
- 회원가입 시 입력한 이메일에 접속하여 받은메일함 확인
- 계정 활성화 필요


 

4. 사이트 생성 절차

1) 언어 선택


2) 웹사이트 정보 입력


3) 팀원 추가 및 권한 설정


4) 위젯 설치 (소스코드 제공)


 

5. 소스 코드 복사
- 빨간 네모로 마우스 커서를 위치하면 "클립보드에 복사" 버튼이 나타남.
- "클립보드에 복사" 클릭



 

6. 소스 코드 붙여넣기
- 작성된 코드에 붙여넣기

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Example</title>
  </head>
  <body>
    <h1><u>Example : Chatting</u></h1>
    <h2>Result</h2>

    <!--Start of Tawk.to Script-->
    <script type="text/javascript">
    var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
    (function(){
    var s1=document.createElement("script"),s0=document.getElementsByTagName("script")[0];
    s1.async=true;
    s1.src='https://embed.tawk.to/62932b4b7b967b117991ca2e/1g47e27mq';
    s1.charset='UTF-8';
    s1.setAttribute('crossorigin','*');
    s0.parentNode.insertBefore(s1,s0);
    })();
    </script>
    <!--End of Tawk.to Script-->
  </body>
</html>

 

7. 채팅 기능 오류
- 오류 발생 : Reconnecting. (다시 연결 중)
- 원인 : tawk.to 에서 제공한 소스 코드를 작성 중인 웹페이지에 작성하여 접속이 안됨. (로컬주소때문에 접속 안됨)
- 해결 : github 에서 page 생성하여 웹페이지에 접속할 수 있도록 함 (Github page 사용하는 방법 링크 - 작성예정)


 

8. github page를 이용하여 채팅 기능 사용
- Reconnecting 오류 해결


 

9. 채팅 입력 - 고객(Client)
- 회원 가입한 tawk.to 에서 대쉬보드를 미리 열어둔다. (https://dashboard.tawk.to/#/chat)
- 소리가 굉장히 요란하므로 볼륨을 낮추고 채팅치시길 바람.


 

10. 채팅 입력 - 관리자(Server)
- 회원 가입한 tawk.to 에서 대쉬보드를 미리 열어둔다. (https://dashboard.tawk.to/#/chat)
- 소리가 굉장히 요란하므로 볼륨을 낮추고 채팅치시길 바람.

1) 대쉬보드 확인 (고객으로부터 수신된 메시지 확인)
- 메시지 수신 확인 (빨간 네모 클릭)


2) 고객 채팅 참여하기


3) 채팅 입력

 


 

# 결과

- tawk.to 에서 채팅 기능을 할 수 있는 소스 코드를 제공받음.
- 채팅은 웹페이지에서 작은 아이콘으로 모서리에 위치함.
- 채팅으로 고객(Client)과 관리자(Server)간 의사소통할 수 있는 기능으로 활용가능

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형
반응형

 


 

11단계로 HTML 웹페이지에 댓글 기능 추가하는 방법


 

# 사전 준비

(Github page 사용하는 방법 링크 - 작성예정)


 

# 댓글 기능 추가하는 방법

1. DISQUS 홈페이지 접속 (https://disqus.com/)

2. 로그인 (회원가입 필요)


 

3. 메인 홈으로 돌아가 "GET STARTED" 클릭


 

4. 사이트 종류 선택
- "I want to install Disqus on my site" 선택


 

5. 웹사이트 이름 입력


 

6. 플랜 선택
- 스크롤을 내리면 "Basic" 플랜에 "Subscribe Now" 선택 (무료 플랜)


 

7. 플랫폼 선택
- 소스코드만 필요하므로 아래 그림과 같이 빨간 네모로 이동함.


 

8. 소스 코드 복사
- 7번 그림에서 나타난 빨간 네모를 클릭 시 다른 페이지를 이동함.
- 소스 코드 적용 방법 영상과 복사 가능한 소스 코드 제공함.
- 소스 코드 복사.


 

9. 소스 코드 붙여넣기
- 작성된 코드에 붙여넣기

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Example</title>
  </head>
  <body>
    <h1><u>Example : Comment</u></h1>
    <h2>Result</h2>

    <div id="disqus_thread"></div>
    <script>
        /**
        *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
        *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables    */
        /*
        var disqus_config = function () {
        this.page.url = PAGE_URL;  // Replace PAGE_URL with your page's canonical URL variable
        this.page.identifier = PAGE_IDENTIFIER; // Replace PAGE_IDENTIFIER with your page's unique identifier variable
        };
        */
        (function() { // DON'T EDIT BELOW THIS LINE
        var d = document, s = d.createElement('script');
        s.src = 'https://manbedded.disqus.com/embed.js';
        s.setAttribute('data-timestamp', +new Date());
        (d.head || d.body).appendChild(s);
        })();
    </script>
    <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
  </body>
</html>

 

10. 댓글 기능 실행 오류
- 오류 발생 : We were unable to load Disqus. If you are a moderator please see our troubleshooting guide.
- 원인 : DISQUS 에서 코드로 작성된 웹페이지에 접속이 안됨. (로컬주소때문에 접속 안됨)
- 해결 : github 에서 page 생성하여 웹페이지에 접속할 수 있도록 함 (Github page 사용하는 방법 링크 - 작성예정)


 

11. github page를 이용하여 댓글 기능 사용
- proceed 클릭

 


 

# 결과

- DISQUS 에서 제공하는 댓글 기능 소스 코드를 이용하여 웹페이지에 적용함.
- 주의할 점은 HTML파일로 작성해서 웹페이지를 여는 경우 댓글 기능이 나타나지 않음. (10단계 참고)

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형
반응형

 


# 결과

- 재생가능.


 

# 예제소스

- <iframe> 으로 동영상 링크를 입력하여 웹페이지에 삽입.

- width, height, title 등 옵션 수정 가능

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Website List</title>
  </head>
  <body>
    <h1><u>Example : Video</u></h1>
    <h2>for study</h2>
    <iframe width="640" height="480" src="https://www.youtube.com/embed/Pk0tYY_qCYY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
  </body>
</html>

 

# 동영상 소스 코드 가져오는 방법

  1. 유튜브 또는 영상사이트에서 영상을 선택한다.

  2. 선택된 영상에 오른쪽 마우스를 눌러 아래 그림과 같은 소스 코드 복사 선택



    (예시)
     <iframe width="879" height="494" src="https://www.youtube.com/embed/Pk0tYY_qCYY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>


  3. 복사된 소스 코드를 코드 에디터(Editor)에 붙여넣기.

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형
반응형

다중 커서(마우스조작)

- Visual Studio 에서 Shift + Alt 단축키 역할

- 반복적 태그 또는 코드 정리를 하기 위함.

  1. Ctrl 키 누른 상태에서 마우스 클릭.
  2. 다중으로 나타난 커서에 키를 입력 시, 각 위치된 커서에 키가 입력 됨.

다중 커서(키보드조작)

- Visual Studio 에서 Shift + Alt 단축키 역할

  1. Ctrl + Alt 키 누른 상태에서 방향키 조작으로 동시에 수정작업할 커서 이동
  2. 수정 완료 시 ESC 키

 


코드라인 이동하기

  1. 이동하고자하는 코드라인을 블럭처리.
  2. Ctrl 누른 상태에서 방향키 위아래.

 

반응형
반응형

 

HTML 구조

- <html> 최상위 태그

- <head>, <body> 상위 태그

- <!DOCTYPE html> 은 해당 문서가 HTML 이라는 알려주는 주석 (관용적)

<!DOCTYPE html>
<html>

  <head>
    <meta charset="utf-8">
  </head>
  
  <body>
    
  </body>
  
</html>

 

열고(open) 쓴다(write contents). 그리고 닫는다(close).

<tag> contents </tag>

 

<strong> :: 굵게(Bold) 강조

<strong> for creating web pages </strong>

 

<u> :: 밑줄 긋기(underline)

<u> for creating web pages </u>

 

<h1> ~ <h6> :: 제목(header)

<h1> header </h1> header
<h2> header </h2> header
<h3> header </h3> header
<h4> header </h4> header
<h5> header </h5> header
<h6> header </h6> header

 

<br> :: 줄바꿈, 개행(enter)

- 열고 닫지 않음.

test<br>test1<br><br>test2

 

<p> :: 줄바꿈, 개행(enter)

- 열고 닫음.

<p>test test1 test 2</p><p>12345 abcdefg</p>

 

<img> :: 이미지 출력

- 출력하고자 하는 이미지의 경로와 파일 이름 입력. ("C:\Users\man\Pictures\fire.jpg")

- 이미지 크기 조절 (20%)

<img src="C:\Users\man\Pictures\fire.jpg" width="20%">

 

<li> :: 목차 또는 목록

- 말머리 같이 개조식으로 나타남.

<li>List 1</li>
<li>test 3</li>
<li>test 6</li>

 

<ul> :: 부모 태그

- Unordered List

- ul 에 속한 문장들을 부모 그룹으로 만듦

- ul 에 속한 문장들은 앞에 띄어쓰기가 쓰여짐.

<ul>
  <li>List 1</li>
  <li>test 3</li>
  <li>test 6</li>
</ul>
<li>List 1</li>
<li>test 3</li>

<ol> :: 부모 태그

- Ordered List

- ul 에 속한 문장들을 부모 그룹으로 만듦

- ul 에 속한 문장들을 자동으로 앞 문장에 숫자를 부여함.

<ol>
  <li>List 1</li>
  <li>test 3</li>
  <li>test 6</li>
</ol>
<li>List 1</li>
<li>test 3</li>

 

<title> :: 페이지 제목

<title>Input title</title>

 

<meta charset> :: 문자 인코딩 설정

- 글자가 깨지는 현상을 방지하고자 문자 인코딩을 설정함.

<meta charset="utf-8">

 

<a> :: 링크

- title 옵션은 "google homepage"에 마우스 커서를 올릴 경우 나타나는 툴팁. (add 표시)

<a href="http://www.google.com" title="add"> google homepage</a>

 

<iframe> :: HTML 웹 페이지 불러오기

- 다른 웹페이지를 불러 현재 작성된 웹페이지로 불러옴.

- 아래의 그림은 동영상 소스 코드를 가져와 다른 웹페이지 링크를 불러옴.

<iframe width="640" height="480" src="https://www.youtube.com/embed/Pk0tYY_qCYY" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

특정 UI 컨트롤 ID포커스(focus)를 설정할 수 있습니다.


 

# 개발 환경

운영체제 : Windows 10 Pro 64bit

개발도구 : Visual Studio 2013 Professional


 

# 결과

  • GetDlgItem(id)->SetFocus( ) 함수 사용
  • Focus 1 또는 Focus 2 버튼에 네모 점선 표시


  • GotoDlgCtrl( ) 함수 사용
  • Focus 1 또는 Focus 2 버튼 테두리에 검은색 얇은 테두리 표시


 

# 예제 소스

- #define setFocus(x) { GotoDlgCtrl(GetDlgItem(x)); GetDlgItem(x)->SetFocus(); }

#define setFocus(x) { GotoDlgCtrl(GetDlgItem(x)); GetDlgItem(x)->SetFocus(); }

void CMFCApplication2013Dlg::OnBnClickedButton1()
{
    setFocus(IDC_BUTTON2);
}

void CMFCApplication2013Dlg::OnBnClickedButton2()
{
    setFocus(IDC_BUTTON1);
}
  • GotoDlgCtrl( ), SetFocus( ) 함수를 이용하여 UI 컨트롤의 포커스를 설정함.
  • #define 로 UI 컨트롤 포커스 매크로 선언 (setFocus(x))
  • setFocus 매크로를 이용하여 포커스 설정할 UI 컨트롤 ID를 인자 값 전달함.
    ex) setFocus(IDC_BUTTON2) / setFocus(IDC_BUTTON1)

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

MFC 윈도우나 다이얼로그를 모니터 화면에 원하는 위치로 지정하여 나타낼 수 있습니다.


 

# 개발 환경

운영체제 : Windows 10 Pro 64bit

개발도구 : Visual Studio 2013 Professional


 

# 결과

  • 2560x1440 모니터에서 MFC 윈도우를 중앙 위치에 나타남


 

# 예제 소스

- OnInitDialog(void)

BOOL CMFCApplication2013Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    SetIcon(m_hIcon, TRUE);	
    SetIcon(m_hIcon, FALSE);

    CRect rect;
    GetClientRect(&rect);

    CPoint pos;
    pos.x = GetSystemMetrics(SM_CXSCREEN)/2.0f - rect.Width()/2.0f;
    pos.y = GetSystemMetrics(SM_CYSCREEN)/2.0f - rect.Height()/2.0f;
    SetWindowPos(NULL, pos.x, pos.y, 0, 0, SWP_NOSIZE);

    return TRUE;
}
  • GetClientRect( ) 은 모니터 화면에서 MFC 윈도우의 좌표 정보를 알 수 있음.
  • GetSystemMetrics(SM_CXSCREEN)모니터 해상도 x축(pixel) 크기 반환
  • GetSystemMetrics(SM_CYSCREEN)모니터 해상도 y축(pixel) 크기 반환
  • 모니터 해상도 x, y축 중앙 좌표MFC 윈도우의 중앙 좌표를 위치하도록 함. (pos.x / pos.y)
  • SetWindowPos( )MFC 윈도우 크기 및 위치 변경

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

MFC 프로그램에서 마우스 클릭 또는 키보드로 선택한 UI컨트롤에 대한 타입을 확인할 수 있습니다.


 

# 개발 환경

운영체제 : Windows 10 Pro 64bit

개발도구 : Visual Studio 2013 Professional


 

# 필요 함수


 

# 결과

  • 키보드로 스페이스(space) 또는 엔터(return)으로 조작
  • Tab 키로 UI컨트롤 포커스(focus)를 이동하면서 checkBox 또는 Button 에 키보드 키를 누릅니다.

 

# 예제 소스

- PreTranslateMessage(MSG* pMsg)

BOOL CMFCApplication2013Dlg::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN) // 키를 누를 경우
    {
        if((pMsg->wParam==VK_SPACE) || (pMsg->wParam==VK_RETURN)) // 스페이스바 또는 엔터 누를 경우
        {
            UINT uiType = GetWindowLong(pMsg->hwnd, GWL_STYLE) & 0x0000000F; // 컨트롤 타입 값 반환
            if     (uiType == BS_CHECKBOX || uiType == BS_AUTOCHECKBOX)    printf("clicked checkBox\n");
            else if(uiType == BS_PUSHBUTTON || uiType == BS_DEFPUSHBUTTON) printf("clicked button\n");
        }
    }

    return CDialogEx::PreTranslateMessage(pMsg);
}
  • pMsg->message키의 상태를 알 수 있음. (WM_KEYDOWN = 키 누름) → (LINK : 윈도우메시지 보기)
  • pMsg->wParam입력한 키 정보를 알 수 있음 (VK_SPACE = 스페이스바 / VK_RETURN = 엔터) → (LINK : 가상 키 보기)
  • GetWindowLong(pMsg->hwnd, GWL_STYLE) 로 통해 UI컨트롤 타입을 알 수 있음.
  • if문 BS_(UI컨트롤 종류)로 반환된 UI컨트롤에 따른 코드를 수행할 수 있음. → (LINK : BS 종류 보기)

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형
반응형

 

MFC 프로그램 창에서 PreTranslateMessage 함수를 이용하여 키보드 키 조합으로 Ctrl + A 또는 C를 누를때 printf 출력합니다.

작성된 코드를 참고하시고 활용하시기 바랍니다.


 

# 개발 환경

운영체제 : Windows 10 Pro 64bit

개발도구 : Visual Studio 2019 Community


 

# 필요 함수


 

# 결과

  • PreTranslateMessage 함수에 키보드 Ctrl+A, C를 누를 시 printf 출력


 

# 예제 소스

- PreTranslateMessage(MSG* pMsg)

BOOL CMFCApplication1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->message == WM_KEYDOWN){
        if(GetKeyState(VK_CONTROL) & 0x8000){
            if     (pMsg->wParam == 65) printf("Ctrl + A\n");
            else if(pMsg->wParam == 67) printf("Ctrl + C\n");
        }   
    }

    return CDialogEx::PreTranslateMessage(pMsg);
}
  • pMsg 매개변수로 입력한 키 정보를 받을 수 있습니다.
  • pMsg->meesage 로 통해 윈도우메시지를 받음(WM_KEYDOWN = 키 누를 때) (윈도우메시지 보기)
  • pMsg->wParam 로 통해 가상키(Virtual Key)를 받음 (VK_code) (가상코드 보기)
  • GetKeyState 로 통해 키의 토글 상태 값과 0x8000 AND연산
    - 0x8000 : 이전에 누른 적이 없고 호출 시점에서 눌린 상태

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형
반응형

 

MFC 프로그램 창에서 마우스 또는 키보드 입력에 대한 이벤트를 처리할 수 있는 함수(PreTranslateMessage)
"클래스 마법사" 로 통해 만들어 낼 수 있습니다.


 

# 개발 환경

운영체제 : Windows 10 Pro 64bit

개발도구 : Visual Studio 2013 Professional


 

# 결과

  • PreTranslateMessage 함수에 printf 를 작성하여 마우스 및 키보드 입력 테스트 확인
  • 마우스 또는 키보드 입력(클릭, 키, 움직임)한 경우 printf 출력


 

# 이벤트 함수 생성

1. 클래스 뷰(Class View) 오픈


2. 클래스 선택

  • 본 프로젝트는 새로 만든 프로젝트로 이름은 다를 수 있습니다.
  • (아래 왼쪽 그림) CMFCApplication1Dlg 는 처음 프로젝트를 만들 시 main 다이얼로그에 대한 클래스입니다.
  • (아래 오른쪽 그림) CMFCApplication1Dlg 은 솔루션탐색기에서 Source Files 폴더에 ~~Dlg.cpp 라는 파일 더블클릭하시면 ~~Dlg::함수이름 으로 된 것을 확인할 수 있습니다.


3. 클래스 마법사(Class Wizard)

  • 클래스 뷰에서 CMFCApplication1Dlg 에 오른쪽 마우스 클릭 후 "클래스 마법사(Class Wizard)" 클릭


4. 이벤트 함수 생성
  1) 클래스 마법사 창 오픈
  2) 가상 함수(Virtual Functions) 메뉴 탭 선택
  3) "PreTranslateMessage" 입력
  4) PreTranslateMessage 함수 선택
  5) 함수 추가 버튼 클릭
  6) 추가된 함수 확인
  7) 확인


5. PreTranslateMessage 함수 소스 확인

 

 


 

# 전체 예제 소스

  • BOOL CMFCApplication1Dlg::PreTranslateMessage(MSG* pMsg) 참고.
#include "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#ifdef _UNICODE
#pragma comment(linker, "/entry:wWinMainCRTStartup /subsystem:console")
#else
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif

CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CMFCApplication1Dlg::IDD, pParent)
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()


BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	SetIcon(m_hIcon, TRUE);	
	SetIcon(m_hIcon, FALSE);



	return TRUE;
}

void CMFCApplication1Dlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}

BOOL CMFCApplication1Dlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class

    printf("pressed the mouse or key\n");

    return CDialogEx::PreTranslateMessage(pMsg);
}

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


반응형

+ Recent posts