728x90
HTML 링크 걸기 / 이미지 링크 걸기
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

일반적으로 링크를 걸기 위해서는 본문에서 아래 코드를 이용합니다.

1
<a href="www.naver.com">이 글을 누르면 네이버로 이동합니다.</a>             
cs

 

또한 글이 아닌 이미지에 링크를 걸기 위해서는 아래 코드를 이용합니다.

1
2
3
<a href="www.naver.com">
    <img src="./image.jpg">             
</a>                      
cs

 

위에서는 상대경로를 이용하여 현재 디렉터리를 의미하는 ./를 사용하였지만,

절대 경로로도 가능하니 편하신걸로 사용하면 됩니다.

(ex. <img src="C:\image.jpg"> )

 

728x90
728x90
MFC Thread(쓰레드/스레드)에서 UpdateData() 함수 사용하기
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

쓰레드에서 직접 UpdateData() 함수를 수행하면 오류를 발생하고 불가능합니다.

아래와 같은 방법으로 우회하여 UpdateData() 함수의 기능을 사용할 수 있습니다.

 

먼저 헤더 파일에 아래와 같은 정의를 추가합니다.

1
#define CUSTOM_UPDATEDATA WM_USER
cs

 

또한 함수 정의를 추가합니다. (5행만 추가하면 됩니다.)

1
2
3
4
5
6
class CnStrCheckerDlg : public CDialogEx
{
//..나머지 소스 생략
public:
    afx_msg LRESULT ForCustomMessageFromThread(WPARAM  wParam, LPARAM lParam);
};
cs

 

이후 소스파일에서 아래와 같이 구현합니다.

1
2
3
4
5
6
7
8
9
BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)
    ON_MESSAGE(CUSTOM_UPDATEDATA, ForCustomMessageFromThread)
END_MESSAGE_MAP()
 
LRESULT CTestDlg::ForCustomMessageFromThread(WPARAM  wParam, LPARAM lParam)
{
    UpdateData(FALSE);
    return 0;
}
    cs

 

단, 보통 이미 BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx) 구현되어 있습니다. 따라서 새로 추가하면 오류가 출력되니,

1~3번은 BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)로 찾아가서 2번만 추가해주세요.

아래처럼..

BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_WM_CREATE()

ON_MESSAGE(CUSTOM_UPDATEDATA, ForCustomMessageFromThread)  // 이 줄만 추가. 나머지는 이미 있음.

END_MESSAGE_MAP()

 

이제 쓰레드 안에서 아래 5~6행처럼 사용하면 UpdateData() 기능을 사용할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
UINT CTestDlg::ThreadFirst(LPVOID _mothod)
{
    CTestDlg *fir = (CTestDlg*)_mothod;
 
    CTestDlg* pDlg = (CTestDlg*)AfxGetApp()->m_pMainWnd;
    pDlg->PostMessage(CUSTOM_UPDATEDATA, 00);
 
    return 0;
}
cs

 

728x90
728x90
윈도우 IP 자동할당 스크립트 (batch 파일)
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

- 고정 IP로 변경할 경우

@echo off

netsh interface ip set address name="<랜카드이름>" source=static <ip> <subnet> <gateway> 1

netsh interface ip delete dns "<랜카드이름>" all

netsh interface ip add dns "<랜카드이름>" <ip>

netsh interface ip add dns "<랜카드이름>" <ip>

ipconfig /all

pause

 

 

- DHCP 서버에서 자동 할당 받도록 하기

@echo off

netsh interface ip set address name="<랜카드이름>" source=dhcp

netsh interface ip delete dns "<랜카드이름>" all

ipconfig /all

pause

 

 

두 소스 모두 메모장에서 열어서 파일 형식을 '모든 파일'로 변경후 .bat 확장자로 저장하시면 실행 파일로 사용가능합니다.

 

728x90
728x90
(C/C++) 시저 암호 구현 예제 (Caesar cipher source)
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

암호문(Cipher Text)은 비밀을 유지하기 위해 당사자끼리만 알 수 있도록 하는 약속 기호와 같은 것입니다.

반대되는 말로는 평문(Plain Text)가 있습니다.

 

즉, 평문을 암호문으로 바꾸는 과정을 암호화(Encryption)이라 하고, 반대로 암호문을 평문으로 바꾸는 것을 복호화(Decryption)이라고 합니다.

이 과정에서 암호화를 수행하거나 복호화를 수행할 때 양 측에서 알고 있어야 하는 수단을 암호화 알고리즘(Encryption Algorithm)이라고 하며, 이 때 사용되는 규칙을 암호화 키(Encryption Key)라고 합니다.

 

 

이와 같은 암호화 방식 중 대체법(Substitution)이라는 방식이 글자를 다른 글자로 대체하는 암호화 방식입니다.

이는 크게 단일 치환과 다중 치환으로 나뉘는데,

단일 치환은 알파벳 한 글자를 다른 하나의 글자로 대체하는 방식으로 암호화를 수행하는 것을 의미합니다.

이 포스팅에서는 단일 치환 중에서 가장 기초적이고 간단하며 유명한 암호 방식인 시저 암호를 구현하여 볼 것입니다.

 

시저 암호:

시저 암호는 로마 시대에 Julius Caesar라는 사람이 군사적인 목적으로 대체법을 사용한 암호입니다.

이는 아주 간단한 단일 치환 방식으로, 알파벳을 각각 3자 혹은 4자, 5자 등으로 이동시킨 방법을 이용합니다.

 

즉, 모든 문자를 좌측으로 5자 이동을 기준으로 한다면

a는 f가 되고, z는 e가 되는 것입니다.

이해가 잘 안되죠? 아래 표를 보면 이해가 쉽게 될 것 입니다.

평문  a b c d z
암호문 f

즉, 위와 같은 환경에서 text라는 평문을 암호화 한다면 yjcy가 되는 것 입니다.

 

 

본격적으로 소스를 보면 아래와 같습니다.

 

#include <iostream>
#include <string>
using namespace std;

char caesar(char c);
int main(void)
{
    string input;
    string output = "";
    
    cout << "평문을 입력한 후, Enter를 눌러주세요: ";                         
    getline(cin,input);

    for (int i = 0; i < input.length(); i++)
        output += caesar(input[i]);

    cout << output << endl << endl;
    return 0;
}

char caesar(char c)
{
    if (isupper(c))
        c = (((c - 65) + 5) % 26) + 65;
    else if(islower(c))
        c = (((c - 97) + 5) % 26) + 97;

    return c;
}

 

먼저, 평문을 받을 input과 암호문이 저장될 output을 선언합니다.

이후 getline을 통해 input에 평문을 받습니다.

getline을 사용한 이유는 공백도 받을 수 있기 때문입니다.

 

평문이 받아지면, 이후에 한 글자씩 caesar 함수로 넘겨서 작업을 수행하게 됩니다.

isupper는 대문자의 작업을 위함이며, islower는 소문자의 작업을 위해 수행됩니다.

나머지 공백 및 숫자, 특수문자등은 그대로 다시 함수에서 리턴되기 때문에 영향을 받지 않습니다.

 

함수 내에서 5라는 숫자는 이동한 자릿 수를 의미하며, 65와 97은 각각 대소문자의 ASCII코드 시작 번호입니다.

또한 26은 알파벳 총 갯수가 26개 이기 때문에 사용됩니다.

(알파벳의 ASCII 코드는 맨 아래에 참고용으로 첨부하겠습니다.)

 

예를들어 대문자 A가 함수의 인자로 넘어온다면 아래 순서로 처리되는 것입니다.

 1. 65(대문자 A의 ascii값) - 65 = 0

 2. 0 + 5(이동된 자릿 수) = 5

 3. 5 % 26 = 5 (%는 나머지를 구합니다.)

 4. 5 + 65 = 70

 5. ascii 코드에서 70은 F를 의미하므로, 결과적으로 A는 F로 치환됩니다.

 

결과의 예제로 Text를 넣으면 아래와 같이 출력됩니다.

 

 

 


부록 1.

ASCII 코드 표 

(이는 편의상 구글링하여 입수한 사진입니다.)

 

 
 

 

 

728x90
728x90
포토샵에서 ico 확장자로 저장 가능하도록 하기
이 포스트는 이전 블로그에서 이전된 포스트입니다.

 

기본적으로 포토샵을 깔면 '따로 저장'에 ico 확장자는 존재하지 않는다.

따라서 이를 추가하여 보자.

 

이는 플러그인의 추가로 가능한데 ICO 관련 플러그인은 아래 사이트에서 다운받을 수 있다.

http://www.telegraphics.com.au/sw/

 
사이트로 이동한 후, 좌측에서 ICO(Windows Icon) Format을 확인하고 해당 라인 우측에서 Windows용 플러그인을 다운로드 한다.
(64bit의 경우 64bit로 받으면 된다. // 64bit 컴퓨터에서라도 포토샵이 "C:\Program Files (x86)\생략" 처럼 (x86)에 있다면 32bit용으로 사용한다.)

 

 

다운로드 하면 zip 파일을 볼 수 있는데 해당 압축파일의 압축을 해제한다.
그러면 아래와 같은 두 파일을 볼 수 있다.
1. (폴더)dist
2. (파일)ICOFormat.8bi
 
 
 
위 두 파일 및 폴더를 "C:\Program Files (x86)\Adobe\Photoshop 7.0\Plug-Ins\" 폴더 안에 복사해준다.
(포토샵 경로는 버전에 따라 각자 알맞게 변경한다.)
 
이후 포토샵에서 '따로 저장'을 누르면 ICO로 저장이 가능한 것을 볼 수 있다.
(단, 테스팅해보니 사진의 크기가 일정 이상 커지면 ICO 확장자가 보이지 않는다. 따라서 보통 32x32 픽셀로 작업을 권장한다.)

 

 

728x90
1···567891011···21

+ Recent posts