首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC++程序无显示,为什么?该怎么处理

2012-04-05 
VC++程序无显示,为什么?#include windows.h#include stdlib.h#include string.hlongWINAPIWndProc(H

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);


}

热点排行