0xAA55 发表于 2014-1-30 13:14:58

【API】C\C++编写Win32图形界面程序的方法


<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>C语言编写Win32图形界面程序</title>
<style type="text/css">
span {
        font-family: '??S';
        font-size: 9pt;
        color: #000000;
}
.sc0 {
}
.sc2 {
        color: #008000;
}
.sc3 {
        color: #008080;
}
.sc4 {
        color: #FF0000;
}
.sc5 {
        color: #0000FF;
}
.sc6 {
        color: #FF0000;
}
.sc9 {
        color: #0000FF;
}
.sc10 {
        color: #000080;
}
.sc11 {
}
.sc16 {
        color: #0000FF;
}
</style>


<div style="float: left; white-space: pre; line-height: 1; background: #FFFFFF; "><span class="sc3">/******************************************************************************

Entry.cpp:定义程序的入口点。
编译方法:
1、用VC6编译链接。
2、用MinGW进行命令行编译。
   命令行编译参数:

gcc -O2 Entry.cpp -o Win32APP.exe

******************************************************************************/</span><span class="sc0">

</span><span class="sc9">#include &lt;windows.h&gt;
</span><span class="sc0">
</span><span class="sc11">LRESULT</span><span class="sc0"> </span><span class="sc11">CALLBACK</span><span class="sc0"> </span><span class="sc11">WndProc</span><span class="sc10">(</span><span class="sc11">HWND</span><span class="sc10">,</span><span class="sc11">UINT</span><span class="sc10">,</span><span class="sc11">WPARAM</span><span class="sc10">,</span><span class="sc11">LPARAM</span><span class="sc10">);</span><span class="sc2">//声明消息处理函数
</span><span class="sc0">
</span><span class="sc11">HWND</span><span class="sc0">      </span><span class="sc11">g_hWnd</span><span class="sc10">;</span><span class="sc2">//主窗口句柄
</span><span class="sc11">WNDCLASSEX</span><span class="sc0"></span><span class="sc11">g_WCEx</span><span class="sc10">=</span><span class="sc2">//窗口类
</span><span class="sc10">{</span><span class="sc0">
    </span><span class="sc5">sizeof</span><span class="sc10">(</span><span class="sc11">g_WCEx</span><span class="sc10">),</span><span class="sc0">
    </span><span class="sc4">0</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc10">(</span><span class="sc11">WNDPROC</span><span class="sc10">)</span><span class="sc11">WndProc</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc4">0</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc4">0</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc10">(</span><span class="sc11">HBRUSH</span><span class="sc10">)(</span><span class="sc11">COLOR_BTNFACE</span><span class="sc10">+</span><span class="sc4">1</span><span class="sc10">),</span><span class="sc2">//窗口背景色(按钮表面)
</span><span class="sc0">    </span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc0">
    </span><span class="sc11">TEXT</span><span class="sc10">(</span><span class="sc6">"WIN32APP_WINDOW"</span><span class="sc10">),</span><span class="sc2">//窗口类名
</span><span class="sc0">    </span><span class="sc5">NULL</span><span class="sc0">
</span><span class="sc10">};</span><span class="sc0">

</span><span class="sc16">int</span><span class="sc0"> </span><span class="sc11">APIENTRY</span><span class="sc0"> </span><span class="sc11">WinMain</span><span class="sc10">(</span><span class="sc11">HINSTANCE</span><span class="sc0"> </span><span class="sc11">hInstance</span><span class="sc10">,</span><span class="sc11">HINSTANCE</span><span class="sc0"> </span><span class="sc11">hPrevInstance</span><span class="sc10">,</span><span class="sc11">LPSTR</span><span class="sc0"> </span><span class="sc11">szCmdLine</span><span class="sc10">,</span><span class="sc16">int</span><span class="sc0"> </span><span class="sc11">nShowCmd</span><span class="sc10">)</span><span class="sc0">
</span><span class="sc10">{</span><span class="sc0">
    </span><span class="sc11">ATOM</span><span class="sc0"> </span><span class="sc11">atClass</span><span class="sc10">;</span><span class="sc2">//注册窗口类的返回值
</span><span class="sc0">    </span><span class="sc11">MSG</span><span class="sc0"> </span><span class="sc11">msg</span><span class="sc10">;</span><span class="sc2">//消息循环要用到的结构体
</span><span class="sc0">    </span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">hInstance</span><span class="sc10">=</span><span class="sc11">hInstance</span><span class="sc10">;</span><span class="sc0">
    </span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">hIcon</span><span class="sc10">=</span><span class="sc11">LoadIcon</span><span class="sc10">(</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">IDI_APPLICATION</span><span class="sc10">);</span><span class="sc2">//默认图标
</span><span class="sc0">    </span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">hIconSm</span><span class="sc10">=</span><span class="sc11">LoadIcon</span><span class="sc10">(</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">IDI_APPLICATION</span><span class="sc10">);</span><span class="sc2">//默认小图标
</span><span class="sc0">    </span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">hCursor</span><span class="sc10">=</span><span class="sc11">LoadCursor</span><span class="sc10">(</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">IDC_ARROW</span><span class="sc10">);</span><span class="sc2">//默认鼠标光标类型
</span><span class="sc0">    </span><span class="sc5">if</span><span class="sc10">(!(</span><span class="sc11">atClass</span><span class="sc10">=</span><span class="sc11">RegisterClassEx</span><span class="sc10">(&amp;</span><span class="sc11">g_WCEx</span><span class="sc10">)))</span><span class="sc2">//取得返回值,同时判断是否为零
</span><span class="sc0">    </span><span class="sc10">{</span><span class="sc0">
      </span><span class="sc11">MessageBox</span><span class="sc10">(</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">TEXT</span><span class="sc10">(</span><span class="sc6">"无法注册窗口类!"</span><span class="sc10">),</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">MB_ICONERROR</span><span class="sc10">);</span><span class="sc0">
      </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc4">1</span><span class="sc10">;</span><span class="sc2">//返回非零表示异常退出
</span><span class="sc0">    </span><span class="sc10">}</span><span class="sc0">
    </span><span class="sc11">g_hWnd</span><span class="sc10">=</span><span class="sc11">CreateWindowEx</span><span class="sc10">(</span><span class="sc4">0</span><span class="sc10">,(</span><span class="sc11">LPCTSTR</span><span class="sc10">)</span><span class="sc11">atClass</span><span class="sc10">,</span><span class="sc11">TEXT</span><span class="sc10">(</span><span class="sc6">"主窗口"</span><span class="sc10">),</span><span class="sc11">WS_OVERLAPPEDWINDOW</span><span class="sc10">,</span><span class="sc2">//用注册窗口类返回值创建窗口
</span><span class="sc0">      </span><span class="sc11">CW_USEDEFAULT</span><span class="sc10">,</span><span class="sc11">CW_USEDEFAULT</span><span class="sc10">,</span><span class="sc4">888</span><span class="sc10">,</span><span class="sc4">666</span><span class="sc10">,</span><span class="sc2">//窗口位置、尺寸
</span><span class="sc0">      </span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">hInstance</span><span class="sc10">,</span><span class="sc5">NULL</span><span class="sc10">);</span><span class="sc0">
    </span><span class="sc5">if</span><span class="sc10">(!</span><span class="sc11">g_hWnd</span><span class="sc10">)</span><span class="sc0">
    </span><span class="sc10">{</span><span class="sc0">
      </span><span class="sc11">MessageBox</span><span class="sc10">(</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">TEXT</span><span class="sc10">(</span><span class="sc6">"无法创建窗口!"</span><span class="sc10">),</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc11">MB_ICONERROR</span><span class="sc10">);</span><span class="sc0">
      </span><span class="sc11">UnregisterClass</span><span class="sc10">(</span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">lpszClassName</span><span class="sc10">,</span><span class="sc11">hInstance</span><span class="sc10">);</span><span class="sc2">//取消注册窗口类
</span><span class="sc0">      </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc4">1</span><span class="sc10">;</span><span class="sc2">//返回非零表示异常退出
</span><span class="sc0">    </span><span class="sc10">}</span><span class="sc0">
    </span><span class="sc11">ShowWindow</span><span class="sc10">(</span><span class="sc11">g_hWnd</span><span class="sc10">,</span><span class="sc11">nShowCmd</span><span class="sc10">);</span><span class="sc2">//显示窗口
</span><span class="sc0">    </span><span class="sc11">UpdateWindow</span><span class="sc10">(</span><span class="sc11">g_hWnd</span><span class="sc10">);</span><span class="sc2">//刷新窗口
</span><span class="sc0">    </span><span class="sc5">while</span><span class="sc10">(</span><span class="sc11">GetMessage</span><span class="sc10">(&amp;</span><span class="sc11">msg</span><span class="sc10">,</span><span class="sc5">NULL</span><span class="sc10">,</span><span class="sc4">0</span><span class="sc10">,</span><span class="sc4">0</span><span class="sc10">))</span><span class="sc2">//消息循环
</span><span class="sc0">    </span><span class="sc10">{</span><span class="sc0">
      </span><span class="sc11">TranslateMessage</span><span class="sc10">(&amp;</span><span class="sc11">msg</span><span class="sc10">);</span><span class="sc2">//翻译键盘消息
</span><span class="sc0">      </span><span class="sc11">DispatchMessage</span><span class="sc10">(&amp;</span><span class="sc11">msg</span><span class="sc10">);</span><span class="sc2">//发送消息给回调函数
</span><span class="sc0">    </span><span class="sc10">}</span><span class="sc0">
    </span><span class="sc11">UnregisterClass</span><span class="sc10">(</span><span class="sc11">g_WCEx</span><span class="sc10">.</span><span class="sc11">lpszClassName</span><span class="sc10">,</span><span class="sc11">hInstance</span><span class="sc10">);</span><span class="sc0">
    </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc4">0</span><span class="sc10">;</span><span class="sc2">//返回0表示正常退出
</span><span class="sc10">}</span><span class="sc0">

</span><span class="sc11">LRESULT</span><span class="sc0"> </span><span class="sc11">CALLBACK</span><span class="sc0"> </span><span class="sc11">WndProc</span><span class="sc10">(</span><span class="sc11">HWND</span><span class="sc0"> </span><span class="sc11">hWnd</span><span class="sc10">,</span><span class="sc11">UINT</span><span class="sc0"> </span><span class="sc11">uMsg</span><span class="sc10">,</span><span class="sc11">WPARAM</span><span class="sc0"> </span><span class="sc11">wp</span><span class="sc10">,</span><span class="sc11">LPARAM</span><span class="sc0"> </span><span class="sc11">lp</span><span class="sc10">)</span><span class="sc0">
</span><span class="sc10">{</span><span class="sc0">
    </span><span class="sc5">switch</span><span class="sc10">(</span><span class="sc11">uMsg</span><span class="sc10">)</span><span class="sc0">
    </span><span class="sc10">{</span><span class="sc0">
    </span><span class="sc5">case</span><span class="sc0"> </span><span class="sc11">WM_DESTROY</span><span class="sc10">:</span><span class="sc0">
      </span><span class="sc11">PostQuitMessage</span><span class="sc10">(</span><span class="sc4">0</span><span class="sc10">);</span><span class="sc2">//发送WM_QUIT退出消息循环
</span><span class="sc0">      </span><span class="sc5">break</span><span class="sc10">;</span><span class="sc0">
    </span><span class="sc5">default</span><span class="sc10">:</span><span class="sc0">
      </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc11">DefWindowProc</span><span class="sc10">(</span><span class="sc11">hWnd</span><span class="sc10">,</span><span class="sc11">uMsg</span><span class="sc10">,</span><span class="sc11">wp</span><span class="sc10">,</span><span class="sc11">lp</span><span class="sc10">);</span><span class="sc0">
    </span><span class="sc10">}</span><span class="sc0">
    </span><span class="sc5">return</span><span class="sc0"> </span><span class="sc4">0</span><span class="sc10">;</span><span class="sc0">
</span><span class="sc10">}</span><span class="sc0">

</span></div>

水货中~~ 发表于 2014-3-14 09:17:23

{:soso_e103:}

(⊙o⊙) 发表于 2017-11-6 07:44:38

看来还是api的。
页: [1]
查看完整版本: 【API】C\C++编写Win32图形界面程序的方法