关于简单的WIN32窗口

falmo 2009-12-15 06:15:40
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine,int nCmdShow)
{
//-----------------------创建窗口------------------------

HWND hWnd;
MSG Msg;
WNDCLASS wndclass;
wndclass.style=0;
wndclass.lpszMenuName=NULL;
wndclass.lpfnWndProc=WndProc;
wndclass.lpszClassName="NewClass";
wndclass.hInstance=hInstance;
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wndclass.hCursor=LoadIcon(NULL,IDC_ARROW);
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.cbWndExtra=0;
wndclass.cbClsExtra=0;
RegisterClass(&wndclass);
return false;
hWnd=CreateWindow("NewClass","Hello",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
//----------------消息循环----------------------
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return 0;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
switch(Msg)
{
case WM_DESTROY:
PostQuitMessage(0);
default:
DefWindowProc(hWnd,Msg,wParam,lParam);
}
return 0;
}
编译成功,却没有出现窗口,请问为什么?
...全文
214 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 falmo 的回复:]
引用 1 楼 akirya 的回复:
消息循环写的有错误

请问能说详细点循环怎么出错了吗?最好能给下代码。。。
[/Quote]
你看帖子只看一行么 .....
没看到下面跟的代码么....
leifeng1982 2009-12-16
  • 打赏
  • 举报
回复
都是高手 有人在 能教小弟一点问题吗
我刚学BCB的 实在资质比较笨 请高手指点我一下
QQ:122662150
想要什么 我尽量满足
onlinedown 2009-12-16
  • 打赏
  • 举报
回复
哈哈
falmo 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fish_gao 的回复:]
RegisterClass(&wndclass);
return false; //取得這句看看
[/Quote]
去掉return false就可以了
本来是if(!RegisterClass(&wndclass)) return false;
后来改了前面后面没改才出错了。。。
谢谢你啦
fish_gao 2009-12-15
  • 打赏
  • 举报
回复
消息囘調函數修改如下

LRESULT CALLBACK WndProc(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)
{
switch(Msg)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,Msg,wParam,lParam);
}
return 0;
}

同時
RegisterClass(&wndclass);
return false; 這句去掉

falmo 2009-12-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 akirya 的回复:]
消息循环写的有错误
[/Quote]
请问能说详细点循环怎么出错了吗?最好能给下代码。。。
perfecttt 2009-12-15
  • 打赏
  • 举报
回复

//可见使用回调函数的编程模式,可以根据不同的需求传递不同的回调函数地址,或者定义各种回调函数的原形(同时也需要改变使用回调函数的参数和返回值约定),实现多种回调事件处理,可以使程序的控制灵活多变,也是一种高效率的,清晰的程序模块之间的耦合方式。在一些异步或复杂的程序系统里尤其有用 -- 你可以在一个模块(如DLL)里专心实现模块核心的业务流程和技术功能,外围的扩展的功能只给出一个回调函数的接口,通过调用其他模块传递过来的回调函数地址的方式,将后续处理无缝地交给另一个模块,随它按自定义的方式处理。


#include <windows.h>
#include <stdio.h>


LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);


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 wndcls;
wndcls.cbClsExtra = 0; // 通常为0
wndcls.cbWndExtra = 0; // 通常为0
wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // 黑色,注意强转
wndcls.hCursor = LoadCursor(NULL, IDC_CROSS); // 当前所以为NULL,十字光标
wndcls.hIcon = LoadIcon(NULL, IDI_ERROR); // 使用Microsoft标准图标,使用 NULL
wndcls.hInstance = hInstance; // 当前实例
wndcls.lpfnWndProc = WinSunProc; // 回调函数
wndcls.lpszClassName = "Beijing"; // 类名,指定窗口的类名
wndcls.lpszMenuName = NULL; // 无菜单
wndcls.style = CS_HREDRAW | CS_VREDRAW; // 水平重画,垂直重画

RegisterClass(&wndcls);

HWND hwnd;

hwnd = CreateWindow("Beijing", // 名字必须与设计出的窗口类类名相同,要使用给予已经注册过类名创建
"2008",
WS_OVERLAPPEDWINDOW,
100,100, // x, y坐标
600, 400, // 宽度、高度
NULL, // 父窗口
NULL, // 菜单
hInstance, // 当前实例句柄
NULL); // 参数,一般为NULL


ShowWindow(hwnd, SW_SHOWNORMAL); // 显示窗口

// UpdateWindow会检查窗口的Update Region,当其不为空时才发送WM_PAINT消息
UpdateWindow(hwnd);

// 消息循环
MSG msg;

while( GetMessage(&msg, NULL, 0, 0) ) // NULL:获取属于调用线程的任何窗口消息
{
TranslateMessage(&msg); // 转换消息
DispatchMessage(&msg); // 将消息传给回调函数
}

return 0;
}

LRESULT CALLBACK WinSunProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch(uMsg)
{
case WM_CHAR:
{
char szChar[20] = "";
sprintf(szChar, "The char is %d", wParam);
MessageBox(hwnd, szChar, "CHAR", 0);
}
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd, "The mouse clicked .", "MOUSE", 0);
HDC hdc;
hdc = GetDC(hwnd);
TextOut(hdc, 100, 100, "Beijing2008", strlen("Beijing2008"));
ReleaseDC(hwnd, hdc);
break;
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "窗口开始...", strlen("窗口开始..."));
EndPaint(hwnd, &ps);
}
break;
case WM_CLOSE:
if( IDYES == MessageBox(hwnd, "是否真的要退出?", "Quit", MB_YESNO) )
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0); // WM_QUIT
break;
default:
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
return 0;
}


给你个能运行的,呵呵!参考一下!
fish_gao 2009-12-15
  • 打赏
  • 举报
回复
RegisterClass(&wndclass);
return false; //取得這句看看
  • 打赏
  • 举报
回复
消息循环写的有错误

#include <windows.h>
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
//-----------------------创建窗口------------------------
HWND hWnd;
MSG Msg;
WNDCLASS wndclass;
wndclass.style = 0;
wndclass.lpszMenuName = NULL;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszClassName = "NewClass";
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wndclass.hCursor = LoadIcon( NULL, IDC_ARROW );
wndclass.hbrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
wndclass.cbWndExtra = 0;
wndclass.cbClsExtra = 0;
RegisterClass( &wndclass );

hWnd = CreateWindow( "NewClass", "Hello", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL );

ShowWindow( hWnd, nCmdShow );
UpdateWindow( hWnd );

//----------------消息循环----------------------
while ( GetMessage( &Msg, NULL, 0, 0 ) )
{
TranslateMessage( &Msg );
DispatchMessage( &Msg );
}

return 0;
}
LRESULT CALLBACK WndProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam )
{
switch ( Msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
default:
return DefWindowProc( hWnd, Msg, wParam, lParam );
}

return 0;
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧