VC++程序无显示,为什么?
#include <windows.h>
#include <stdlib.h>
#include <string.h>
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance, int nCmdShow);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
MSG Message;
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
return FALSE;
while(GetMessage(&Message,0,0,0)) //消息循环
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{
HDC hDC;//定义指向设备上下问的句柄
HBRUSH hBrush;//定义指向画刷的句柄
HPEN hPen;//定义指向画笔的句柄
PAINTSTRUCT PtStr;//定义指向包含绘图信息的结构体变量
switch(iMessage)//处理消息
{
case WM_PAINT://处理绘图消息
hDC=BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);//设置映射模式
hPen=(HPEN)GetStockObject(BLACK_PEN);//设置画笔为系统预定义的黑色
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//深灰色画笔
SelectObject(hDC,hBrush);//选择画刷
SelectObject(hDC,hPen);//选择画笔
RoundRect(hDC,50,120,100,200,15,15);//圆角矩形
hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);//淡灰色画笔
SelectObject(hDC,hBrush);//选择画刷
Ellipse(hDC,150,50,200,150);//椭圆
hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH);//采用系统预定义的虚画刷
SelectObject(hDC,hBrush);//选择画刷
Pie(hDC,250,50,300,100,250,50,300,50);//饼形
EndPaint(hWnd,&PtStr);//结束绘图
return 0;
case WM_DESTROY://结束应用程序
PostQuitMessage(0);
return 0;
default://其他消息处理程序
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
}
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow)//初始化窗口
{
HWND hWnd;
hWnd=CreateWindow( "WinFill ",//生成窗口
"填充示例程序 ",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow);//显示窗口
UpdateWindow(hWnd);
return TRUE;
}
BOOL InitWindowsClass(HINSTANCE hInstance)//定义窗口类
{
WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadIcon(NULL, "END ");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName= "WinFill ";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}
程序有点多,呵呵,编译和连接都通过了,但就是不显示出要输出的图形。。是函数用错了还是别的原因,高手指点下!!!
[解决办法]
你的程序运行不了,我给你一个可以运行的。而且你没有必要用那么多个画图函数,只要一个能够画出来就表示那里没有错。
#include <windows.h>
#define WIN_HEIGHT 600
#define WIN_WIDTH 800
HDC hdc;
HWND hwnd = NULL;
COLORREF color = RGB(0,0,0);
void draw();
LRESULT CALLBACK WindowProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
PAINTSTRUCT ps;
switch(uMsg)
{
case WM_CREATE:
{
}
break;
case WM_DESTROY:
{
PostQuitMessage(0);
}
break;
case WM_PAINT:
{
BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);
}
break;
case WM_LBUTTONDOWN:
{
}
break;
case WM_LBUTTONUP:
{
}
break;
case WM_RBUTTONUP:
{
}
break;
case WM_RBUTTONDOWN:
{
}
break;
case WM_MOUSEMOVE:
{
draw();
}
break;
case WM_KEYUP:
{
if (wParam == VK_ESCAPE)
{
SendMessage(hwnd, WM_CLOSE, 0, 0);//ESC
}
}
break;
default:
return (DefWindowProc(hwnd, uMsg, wParam, lParam));
}
}
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
HANDLE hMutex = CreateMutex(NULL,FALSE, "test ");
if(ERROR_ALREADY_EXISTS==GetLastError())
{
return FALSE;
}
TCHAR azAppClassName[] = TEXT( "winmain ");
TCHAR szAppTitleName[] = TEXT( "测试 ");
MSG msg;
//创建窗口类
WNDCLASSEX wndclass;
wndclass.cbClsExtra = 0;//是否为这个实例额外分配空间
wndclass.cbSize = sizeof(WNDCLASSEX);//结构WNDCLASSEX的大小
wndclass.cbWndExtra = 0;//是否为额外的窗口分配空间
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//指定背景的颜色
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);//指定光标形状
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);//指定图标
wndclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);//小图标
wndclass.hInstance = hInstance;//应用程序实例句柄
wndclass.lpfnWndProc = WindowProc;//指定消息处理函数(回调函数)
wndclass.lpszClassName = azAppClassName;//为类创建一个名字(系统识别)
wndclass.lpszMenuName = NULL;//为类指定一个菜单
wndclass.style = CS_HREDRAW | CS_VREDRAW;//为类指定一个样式
//注册窗口类(加入了容错处理)
if(!RegisterClassEx(& wndclass))
{
MessageBox(NULL, "注册window类--失败! ", szAppTitleName, MB_ICONERROR);
return 0;
}
//创建窗口
hwnd = CreateWindowEx(0, azAppClassName, szAppTitleName, WS_OVERLAPPEDWINDOW &~WS_MAXIMIZEBOX&~WS_SIZEBOX,
(GetSystemMetrics(SM_CXFULLSCREEN)-WIN_WIDTH)/2, (GetSystemMetrics(SM_CYFULLSCREEN)-WIN_HEIGHT)/2, WIN_WIDTH,
WIN_HEIGHT, NULL, NULL, hInstance, NULL);
//显示和更新窗口
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
hdc = GetDC(hwnd);
while(GetMessage(&msg,NULL,0,0))
{
if(msg.message == WM_QUIT)
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
ReleaseDC(hwnd,hdc);
return int(msg.wParam);
}
void draw()
{
color = RGB(rand()%256,rand()%256,rand()%256);
HPEN pen1 = CreatePen(PS_INSIDEFRAME,1,color);
HBRUSH brush = CreateSolidBrush(color);
SelectObject(hdc,pen1);
SelectObject(hdc,brush);
Rectangle(hdc,rand()%800,rand()%600,rand()%800,rand()%600);
DeleteObject(pen1);
DeleteObject(brush);
}