很多学C的朋友认为 C语言
只能写DOS程序,而不能像 C#
那样写windows窗体的程序,这你可就打错特错了,今天我来简单掩饰下C语言怎么利用windows提供出来的API写windows窗体程序。
#include
LRESULT CALLBACK WindoWProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
)//入口函数
{
WNDCLASS wndclass;
HWND wndhwnd;
MSG msg;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//加载图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//加载鼠标样式
wndclass.style=CS_VREDRAW | CS_HREDRAW;//窗口样式
wndclass.lpfnWndProc=WindowProc;//窗口过程回调函数
wndclass.cbClsExtra=0;//类额外内存
wndclass.cbWndExtra=0;//窗口额外内存
wndclass.hInstance=hInstance;//
wndclass.hbrBackground=(HBRUSH)GetStockObject(SYSTEM_FONT);//窗口颜色
wndclass.lpszMenuName=NULL;//窗口菜单
wndclass.lpszClassName="testWindow";//窗口类名
RegisterClass(&wndclass);
wndhwnd=CreateWindow("testWindow","windows",WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(wndhwnd,SW_SHOWNORMAL);
UpdateWindow(wndhwnd);
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
HDC hdc,hDC;
PAINTSTRUCT ps;
char szchar[20];
static int i=0;
switch (uMsg)
{
case WM_PAINT://窗口重绘消息,窗口加载和重绘的时候产生该消息
hdc=BeginPaint(hwnd,&ps);
TextOut(hdc,0,0,"窗口加载完成",strlen("窗口加载完成"));//往窗口输出文本
//MessageBox(hwnd,"Hello World","Hi",MB_OK);
EndPaint(hwnd,&ps);
break;
case WM_CHAR://处理键盘按键消息
sprintf(szchar,"char is %c",wParam);
MessageBox(hwnd,szchar,"提示",MB_OK);
break;
case WM_LBUTTONDOWN://处理鼠标左键按下消息
MessageBox(hwnd,"mouse click","提示",MB_OK);
hDC=GetDC(hwnd);
TextOut(hDC,0,50,"鼠标事件处理时显示文字",strlen("鼠标事件处理时显示文字"));
ReleaseDC(hwnd,hDC);
break;
case WM_CLOSE://窗口关闭消息
if(IDYES==MessageBox(hwnd,"你确定要关闭吗?","提示",MB_YESNO))
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);//使用缺省值来调用窗口过程函数
}
return 0;
}
http://www.bcwhy.com/thread-14423-1-1.html