Win32 SDK 기초 (3) 처음부터 Windows 창을 만드는 방법에 대한 첫 번째 단계

黄舟
풀어 주다: 2017-06-06 09:38:40
원래의
2182명이 탐색했습니다.

1. Windows의 프로그램 분류부터 시작하겠습니다.

고등학교 때 컴퓨터를 처음 접했을 때부터(부끄러워요. 고등학교 때까지 컴퓨터 사용법도 모르고 이런 게 있는 줄도 몰랐어요) QQ 대학 1학년 때까지만 해도 우리 집은 가난해서 선택의 여지가 없었어요.) 내 개념으로는 컴퓨터가 windows여야 합니다. 그래서 대학을 졸업하고서야 linux 같은 운영체제가 있다는 걸 알게 됐어요. 그러다 졸업하고 일을 시작하면서 애플에도 운영체제가 있다는 걸 알게 됐어요. 그래서 나는 왜 내가 코더로서 돌아올 수 없는 길을 택했는지 아직도 알 수 없다. 그러다가 그는 발을 디디자마자 통제력을 잃었고 어느 ​​날 해변에서 총에 맞아 죽었습니다. . .

말도 안 되는 소리는 그만하고 본론으로 들어가겠습니다. 수년간 windows와 접촉해 온 프로그래머로서 우리는 먼저 windows의 프로그램을 다음 범주로 분류해야 합니다.

(1) 콘솔 프로그램.

아마도 제가 전문 코더로서 개발한 첫 프로그램이 아닐까 싶습니다. 우리가 대학교 1학년 때 처음으로 "hello world"를 C 언어로 작성했을 때 당시의 프로그램은 콘솔 프로그램이었습니다. 그 본질은 DOS 프로그램입니다. 자체 창이 없습니다. 표시되는 출력은 Hello입니다. 세계의 창은 프로그램 자체가 운영 체제에서 빌려온 DOS 창입니다.

(2) 윈도우 프로그램입니다.

윈도우 프로그램은 아마도 우리가 가장 많이 접하는 프로그램일 것입니다. 일반적으로 사용되는 office부터 다양한 인터페이스를 갖춘 프로그램까지, 모두 windows 아래에 있는 윈도우 프로그램입니다. 이 칼럼의 목표는 windows 윈도우 프로그램의 기본을 소개하는 것입니다.

(3) 동적 라이브러리 프로그램.

이게 그 유명한 dll입니다. 초보자라면 돼지가 달리는 모습만 봤을 것이고, windows를 사용하는 일반 사용자라면 돼지가 달리는 모습을 본 적이 없을 것입니다. 통과하다. 하지만 베테랑 프로그래머라면 이 모든 것이 너무나 익숙할 것입니다. 또한 이러한 유형의 프로그램을 개발하는 기본 사항도 나중에 소개하겠습니다.

(4)

static도서관 프로그램.

접미사가 lib인 프로그램 유형입니다. dll만큼 널리 사용되지는 않지만 여전히 세계적으로 그 자체의 위상을 갖고 있습니다. 마찬가지로 나중에 개발의 개발 기반도 소개하겠습니다.

winddows 프로그램의 넌센스와 분류를 소개한 후, 공식적으로 다음 콘텐츠 개발을 시작했습니다.

2. windows를 처음부터 만드는 과정

이 글의 주요 목적은 windows 프로그램을 직접 만드는 방법을 소개하는 것입니다. , 이런 프로그램 인터페이스 프레임워크Windows 인터페이스 프로그램의 생성 과정을 완전히 캡슐화했으며, 다음으로 배워야 할 것은 MFC의 제약을 없애고 개발하고 생성하는 것입니다. windows 인터페이스 프로그램을 처음부터 다시 만들어 보세요. 먼저 Windows 프로그램을 만드는 단계를 소개하겠습니다. 다음 글에서는 각 단계를 단계별로 구현하고 설명하겠습니다. Windows 인터페이스 프로그램 생성은

7 단계로 나뉩니다. (1) WinMain

function (여기는 windows 인터페이스 프로그램 진입에 대해서는 본 칼럼의 첫 번째 글을 참고하시기 바랍니다.) (2) 윈도우 처리 기능을 정의합니다. (3) 등록 창

(4) 생성 창

(5) 표시 창

(6) 메시지 쓰기

루프

기능

(7) 메시지 처리 3. 테스트 환경 만들기

먼저

win32 창 프로그램을 만들어 보겠습니다. 우리는 VS2015programming 환경을 사용합니다. win32window 프로그램을 만드는 단계는 ->new->프로젝트를 파일로 만들고 선택하는 것입니다. 비주얼 템플릿에서 C++을 선택한 다음 Win32Window Program을 선택하세요. 그러나 마지막 단계에서 Finish 버튼을 클릭하기 전에 빈 프로젝트를 선택해야 합니다. 즉, 프로젝트가 완료된 후에는 파일이 없다는 의미입니다. 처음부터 창 프로그램. 3.1

정의

winMain
함수.新 재
새로 추가된 빈 CPP 파일에 다음 프로그램 입구의 wwinmain 함수를 추가합니다:

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
}
로그인 후 복사
여기서는

winmain 함수의 여러 매개 변수를 소개합니다. hInstance - 현재 프로그램이 위치한 메모리 위치인 현재 프로그램의 인스턴스 핸들.

hPrevInstance ——当前程序前一个程序实例句柄,目前已经废弃,不再使用。

lpCmdLine —— 命令行参数,我们执行程序时可以用命令行的形式传入一些参数。

nCmdShow —— 窗口的显示方式,最大化、最小化那种。

3.2 定义窗口处理函数

窗口处理函数用来为系统回调函数,主要用来处理消息。像我们平常对程序的一系列操作,反应到程序内部,其实都是产生了一系列的操作。比如窗口关闭时会传递窗口关闭的消息,窗口最大化时也会传递最大化的消息,包括我们拖动窗口都会产生消息。而我们定义的窗口处理函数就是处理操作上述的消息,如下面所示,我们定义的窗口处理函数处理了一个WM_DESTROY消息,这是我们在关闭窗口时发送的消息,被我们的窗口处理函数捕获之后,会调用系统的APIPostQuitMessage(0),使窗口退出

窗口处理函数共有四个参数:

hWnd —— 是窗口的句柄。

uMsg —— 是传入的消息,它的本质就是无符号整形的数字。

wParamlParam —— 是消息附带的两个参数。

//窗口处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_DESTROY:
        PostQuitMessage(0);//可以使GetMessage返回0
        break;
        default:
        break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
로그인 후 복사

我们先定义窗口处理函数,稍后再进行使用。

3.3 编写窗口注册函数

一个窗口,在创建之前需要先向操作系统进行注册,这类似现实生活中我们开公司,要先向工商局进行注册一样。wce是一个WNDCLASSEX 类型的结构体,这就是一个窗口类,包含了我们所需要的窗口信息,包括菜单、图标、背景色等等。它最主要的是两个成员,hInstance是当前程序的实例句柄,lpszClassName是我们注册的类名称,其他的这里不再解释,可参照MSDN。

我们通过RegisterClassEx()这个API将窗口类在操作系统中进行注册,并通过其返回值判断是否注册成功。我们在WinMain函数中进行窗口的注册工作,请看下面的代码:

int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR    lpCmdLine,
_In_ int       nCmdShow)
{
    //注册窗口类
    WNDCLASSEX wce = { 0 };
    wce.cbSize = sizeof(wce);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    wce.hCursor = NULL;
    wce.hIcon = NULL;
    wce.hIconSm = NULL;
    wce.hInstance = hInstance;
    wce.lpfnWndProc = wndProc;
    wce.lpszClassName = “Main”;
    wce.lpszMenuName = NULL;
    wce.style = CS_HREDRAW | CS_VREDRAW;
    ATOM nAtom = RegisterClassEx(&wce);
    if (!nAtom )
    {
        MessageBox(NULL, "注册失败", "Infor", MB_OK);
        return 0;
    }
}
로그인 후 복사

3.4 创建窗口

接下来我们创建窗口,创建窗口我们使用CreateWindowEx系统API,请留意下面它的第2、3两个参数,第二个参数使我们之前注册的窗口类名称,第三个参数是窗口的标题名称,其他的是一些窗口显示的参数,这里不再详细解释。

HWND hWnd = CreateWindowEx(0, “Main”, “Window”,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL);
로그인 후 복사

위 내용은 Win32 SDK 기초 (3) 처음부터 Windows 창을 만드는 방법에 대한 첫 번째 단계의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!