Win32 SDK の基本 (3) Windows ウィンドウを最初から作成する方法の最初のステップ

黄舟
リリース: 2017-06-06 09:38:40
オリジナル
2182 人が閲覧しました

1. Windowsのプログラム分類から始めましょう。

私は高校生の時に初めてパソコンに触れた時から(恥ずかしながらパソコンの使い方は高校までしか知りませんでした。大学1年生の時までそんな事知りませんでした)私の家族は貧しかったので選択肢がありませんでした)。私の概念では、コンピューターは windows のようなものであるはずです。それで、linuxのようなオペレーティングシステムがあることを知ったのは、大学を卒業しようとしていた頃でした。その後、卒業後に働き始めてから、Appleも独自のオペレーティングシステムを持っていることに気づきました。システム。したがって、なぜ私がプログラマーとして後戻りのできない道を歩み始めたのか、いまだにわかりません。そして、彼はそこに足を踏み入れるとすぐに手に負えなくなり、ある日、海岸で射殺されました。 。 。 ナンセンスな話はこれくらいにして、本題に移りましょう。 長年 windows

と関わってきたので、プログラマとして、私たちはまず

windows のプログラムを次のカテゴリに分類する必要があります: (1) コンソール プログラム。

これはおそらく私がプロのプログラマーとして開発した最初のプログラムです。私たちが大学1年生の時に初めて

C言語で最初の「hello world」を書いたとき、その時のプログラムはコンソールプログラムでした。その本質は DOS プログラムです。表示される出力は Hello です。 worldのウィンドウは、プログラム自体がオペレーティングシステムから借用したDOSウィンドウです。 (2) ウィンドウプログラム。

ウィンドウ プログラムは、おそらく私たちが最もよく使うプログラムです。一般的に使用される

office から、さまざまな目に見えるインターフェイスを持つプログラムまで、それらはすべて windows の下にあるウィンドウ プログラムです。このコラムの目的は、windows ウィンドウ プログラムの基本を紹介することです。 (3) ダイナミックライブラリプログラム。

これは有名な

dll です。初心者にとっては、豚が走っているのを見ただけで、豚肉を食べたことがないかもしれません。 Windows の一般ユーザーにとっては、豚が走っているのを見たことがないかもしれません。合格。しかし、ベテラン プログラマーにとって、これはよく知られたことです。この種のプログラム開発の基本についても後ほど紹介します。 (4)静的ライブラリプログラム。

これは、

libという接尾辞が付いたプログラムタイプで、dllほど一般的には使用されていませんが、依然として世界では独自の地位を持っています。同様に、その開発基盤についても後ほど紹介します。 windows

プログラムのナンセンスと分類を紹介しましたが、私たちは以下のコンテンツの開発を正式に開始しました。

2. Windowsをゼロから作成するプロセス

この記事の主な目的は、Windowsプログラムを自分で作成する方法を紹介することです。おそらく、MFCプログラムについて聞いたことがあるでしょう。 、この種のプログラム インターフェイスフレームワークは、Windowsインターフェイスプログラムの作成プロセスを完全にカプセル化しており、次に学ばなければならないことは、MFCの制約を取り除き、開発して作成することですwindowsインターフェイスプログラムをゼロから作成します。まず、Windowsプログラムを作成する手順を紹介します。次の記事で、各手順を段階的に実装して説明します。

Windowsインターフェースプログラムの作成は7のステップに分かれています:

(1)

WinMain関数を定義windowsですインターフェースプログラムの入り口については、本コラムの初回記事を参照してください。) (2) ウィンドウ処理関数を定義します。

(3) 登録ウィンドウ

(4) 作成ウィンドウ

(5) 表示ウィンドウ

(6) メッセージの書き込み

ループ

関数 (7) メッセージの処理

3. テスト環境を作成します

まず、

ウィンドウプログラムを作成しましょう。 VS2015プログラミング環境を使用します。win32ウィンドウプログラムを作成する手順は、->新しい->プロジェクトをファイルして選択することです。 ビジュアルテンプレート内で C++を選択し、Win32ウィンドウプログラムを選択します。 しかし、最後のステップでは、[完了] ボタンをクリックする前に、空のプロジェクトを選択する必要があります。つまり、プロジェクトが完了すると、新しい cpp ファイルを作成する必要があります。ウィンドウプログラムを最初から作成します。

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 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!