如何构建C#WinForms等C Windows API程序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何构建C#WinForms等C Windows API程序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2567字,纯文字阅读大概需要4分钟。
内容图文
![如何构建C#WinForms等C Windows API程序](/upload/InfoBanner/zyjiaocheng/953/d30f8e4ca1bf4aeca78f0db9ae8ad201.jpg)
我是一名经验丰富的GUI C#程序员,并且仅具有CLI的C/C++经验.
我正在使用C教我自己的原生Windows API.我能够创建带按钮和输入字段等的窗口;单击按钮并键入文本等时执行操作.
但是,到目前为止我所做的一切都是在没有使用类的单个c或cpp文件中.
在C#中,我将创建扩展Form的类:
public class MyForm : Form { }
然后像这样打开它:
MyForm myForm = new MyForm();
myForm.ShowDialog();
要么:
new MyForm().ShowDialog();
要么:
Application.Run(new MyForm());
然而,使用我的平面文件c / cpp方法我只有一个WinMain,它注册我的窗口类,创建窗口,消息循环只是搅拌.在我学习基础知识时,这对小程序来说并不可怕,但显然我希望能像C#中那样做得更好.
我没有找到本地Windows API的许多教程或代码示例,以显示通常如何完成此操作.
有人可以发一些骨架代码和/或链接到一个教程,解释这是如何通常完成的?
解决方法:
我使用了自己的Window类,类似于下面显示的类.这是a reply I poseted for a different question,但你可能会觉得这很有用.所以这里是:
#pragma once
#include <windows.h>
#include <process.h>
#include <iostream>
using namespace std;
static const char *g_AppName = "Test";
class CMyWindow
{
HWND _hWnd;
int _width;
int _height;
public:
CMyWindow(const int width,const int height):_hWnd(NULL),_width(width),_height(height)
{
_beginthread( &CMyWindow::thread_entry, 0, this);
}
~CMyWindow(void)
{
SendMessage(_hWnd, WM_CLOSE, NULL, NULL);
}
private:
static void thread_entry(void * p_userdata)
{
CMyWindow * p_win = static_cast<CMyWindow*> (p_userdata);
p_win->create_window();
p_win->message_loop();
}
void create_window()
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = &CMyWindow::WindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = GetModuleHandle(NULL);
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = g_AppName;
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
RegisterClassEx(&wcex);
_hWnd = CreateWindow(g_AppName, g_AppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, GetModuleHandle(NULL), NULL);
ShowWindow(_hWnd, SW_SHOWDEFAULT);
UpdateWindow(_hWnd);
}
void message_loop()
{
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0))
{
if(msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
static LRESULT WINAPI WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_POWERBROADCAST:
{
//power management code here
}
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
};
还要确保包含退出条件.
内容总结
以上是互联网集市为您收集整理的如何构建C#WinForms等C Windows API程序全部内容,希望文章能够帮你解决如何构建C#WinForms等C Windows API程序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。