生产窗体可以使用CreateWindowEx函数。
函数功能:该函数创建一个具有扩展风格的层叠式窗口、d出式窗口或子窗口,其他与CreateWindow函数相同。
函数原型:
CreateWindowEx函数创建一个层叠的,自动d出的(pop-up)或是一个子窗口通过扩展格式。另外这个函数的作用与CreateWindow函数的作用相同。要获得更多的关于创建窗口的信息和关于CreateWindowEx函数参数的详细描述。参见CreateWindow
HWND CreateWindowEx(
DWOR DdwExStyle, //窗口的扩展风格
LPCTSTR lpClassName, //指向注册类名的指针
LPCTSTR lpWindowName, //指向窗口名称的指针
DWORD dwStyle, 或蚂 //窗口风格
int x, //窗口的水平位置
int y, //窗口的垂直位置
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hWndParent, //父窗口的句柄
HMENU hMenu, //菜单的句柄或是子窗口的标识符
HINSTANCE hInstance, //应用程序实例的句柄
LPVOID lpParam //指向窗口的创建数据
)
例程:
include<windows.h>#include<stdio.h>
LRESULT CALLBACK WinDouProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
class CWnd
{
public:
CWnd()
{
m_hWnd = NULL
}
BOOL CreateEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, 带团闷 // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu or child-window identifier
HANDLE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data
)
BOOL ShowWindow( int nCmdShow )
BOOL UpdateWindow()
public:
HWND m_hWnd
}
BOOL CWnd::CreateEx(
DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu or child-window identifier
HANDLE hInstance, // handle to application instance
蠢弯 LPVOID lpParam // pointer to window-creation data
)
{
m_hWnd = ::CreateWindowEx (dwExStyle,lpClassName,lpWindowName,dwStyle,x,y,nWidth,nHeight,hWndParent,hMenu,(HINSTANCE)hInstance,lpParam)
if(m_hWnd != NULL)
return TRUE
else
return FALSE
}
BOOL CWnd::ShowWindow(int nCmdShow)
{
return ::ShowWindow(m_hWnd,nCmdShow)
}
BOOL CWnd::UpdateWindow()
{
return ::UpdateWindow(m_hWnd)
}
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
)
{
WNDCLASS wndclass //先设计窗口类
wndclass.cbClsExtra = 0
wndclass.cbWndExtra = 0
wndclass.hbrBackground = (HBRUSH)GetStockObject(DKGRAY_BRUSH)
wndclass.hCursor = LoadCursor(NULL,IDC_HELP)
wndclass.hIcon = LoadIcon(NULL,IDI_WARNING)
wndclass.hInstance = hInstance
wndclass.lpfnWndProc = WinDouProc
wndclass.lpszClassName = "Magic_Maggie"
wndclass.lpszMenuName = 0
wndclass.style = CS_VREDRAW | CS_HREDRAW
//某一个变量原油几个变量去掉一个特征,可以用取反(~)后再进行与(&)
//例如:style上去掉CS_NOCLOSE,可以style&~CS_NOCLOSE
RegisterClass(&wndclass) ///注意先建立再注册昂
CWnd wnd
wnd.CreateEx(NULL,"Magic_Maggie","DouDou",WS_OVERLAPPEDWINDOW,0,0,800,600,NULL,NULL,hInstance,NULL)
wnd.ShowWindow(SW_SHOWNORMAL)
wnd.UpdateWindow()
MSG msg //消息循环
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg)
DispatchMessage(&msg) //触发WinDouProc
}
return 0
}
LRESULT CALLBACK WinDouProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_LBUTTONDOWN:
MessageBox(hwnd,"您按下了鼠标左键昂","豆豆的程序",MB_OK)
HDC hdc
hdc = GetDC(hwnd)
//The GetDC function retrieves a handle to a display device context for the client area of a specified window or for the entire screen. You can use the returned handle in subsequent GDI functions to draw in the device context.
TextOut(hdc,0,0,"感谢您对豆豆程序的支持昂",strlen("感谢您对豆豆程序的支持昂"))
ReleaseDC(hwnd,hdc)
break
case WM_CHAR:
char szChar[20]
sprintf(szChar,"Char is %d",wParam)
MessageBox(hwnd,szChar,"豆豆的程序",MB_OK)
break
case WM_PAINT:
PAINTSTRUCT ps
HDC hDc
hDc = BeginPaint(hwnd,&ps)
TextOut(hDc,0,0,"这个是重绘滴哦",strlen("这个是重绘滴哦"))
EndPaint(hwnd,&ps)
break
case WM_CLOSE: //这个case与下边的destroy这个case不要弄错了,否则窗口不出现,但任务管理器中运行
if(IDYES == MessageBox(hwnd,"您真的要退出么?","豆豆的程序",MB_YESNO))
{
DestroyWindow(hwnd)
}
break
case WM_DESTROY:
PostQuitMessage(0)
//////////////////////////////////////////?????????????????????
break
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam) // 别忘记了return
}
return 0
}
步骤:
1、注册窗口类;
2、创建窗体;
3、消息循环;
4、编写窗口消息处理函数。
代码:
#include <windows.h>#include<tchar.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
int WINAPI _tWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR szCmdLine, int nCmdShow)
{
WNDCLASS wc
wc.style = CS_HREDRAW | CS_VREDRAW
wc.lpfnWndProc = WindowProc
wc.cbClsExtra = 0
wc.cbWndExtra = 0
wc.hInstance = hInstance
wc.hIcon = NULL
wc.hCursor = LoadCursor(NULL,IDC_ARROW)
wc.hbrBackground = (HBRUSH)COLOR_WINDOW//(HBRUSH)GetStockObject()
wc.lpszMenuName = NULL
wc.lpszClassName = _T("MyWindowClass")
if (!RegisterClass(&wc))
{
MessageBox (NULL, _T("无法注册窗口类"), _T("错误"), MB_OK)
return 0
}
HWND newWindow = CreateWindow(
蠢乱链 _T("MyWindowClass"),
_T("我的第一个winapi程序"),
WS_OVERLAPPEDWINDOW,
0,
0,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
)
if (NULL == newWindow)
{
MessageBox (NULL, _T("无法创建窗体"), _T("错误"), MB_OK)
return 0
}
ShowWindow(newWindow, nCmdShow)
UpdateWindow(newWindow)
MSG msg
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg)
DispatchMessage(&msg)
}
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
{
陪雹PostQuitMessage(0)
break
}
default :
return DefWindowProc(hwnd, uMsg, wParam, lParam)
}
return 0
}
就是一个只有标带孙题栏、关闭按钮、最小化按钮、最大化/还原按钮、显示区域的窗体。
要用C语言编写一轮信个窗体应用程序需要调用系统或第三方提供的API函数,一般的步骤是:定义窗口类
注册窗口类昌桐乎
创建窗口
显示、更新窗口
进行消息循环,不断处理耐悉窗口消息
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)