仿写一个window窗口代码,后台有进程没窗口,求找BUG
c++吧
全部回复
仅看楼主
level 1
盖世家族 楼主
#include <windows.h>
#include <stdio.h> LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
); int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR IpCmdLine,
int nCmdShow ) {
WNDCLASS wndcls;
wndcls.cbClsExtra=0;
wndcls.cbWndExtra=0;
wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);
wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);
wndcls.hInstance=hInstance;
wndcls.lpfnWndProc=WinSunProc;
wndcls.lpszClassName=NULL;
wndcls.lpszMenuName=NULL;
wndcls.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&wndcls); HWND hwnd;
hwnd=CreateWindow("weixin2003","顶你个肺中心",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL); ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd); MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WinSunProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"weixin",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"mouse clicked","weixin",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"里马",strlen("里马"));
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,"是否关闭?","weixin",MB_YESNO))
{
DestroyWindow(hwnd); }
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
2012年11月02日 16点11分 1
level 12
我知道你问题在哪里,但是我先不告诉你。给你一点提示,最好单步调试确认每个函数的返回值都正确(例如 CreateWindowEx 是否返回非 NULL)。对于返回值不
正确的
函数,使用 GetLastError 和 FormatMessage 获得错误信息。
2012年11月02日 17点11分 2
或者watch框打个@err,hr
2012年11月02日 17点11分
大侠,能不能照着上面那个程序修改好发给我学习学习
2012年11月03日 04点11分
我刚开始学的,甚至语句有什么意思也不懂,我想先找一可运行的代码再开始学习
2012年11月03日 04点11分
回复 盖世家族 :写控制台去,不要写 GUI。
2012年11月03日 06点11分
level 14
字符编码不规范,Ascii码要用A函数,CreateWindow要用TEXT("")。
2012年11月02日 18点11分 3
wndcls.lpszClassName = 这里必须指定窗口类名,创建窗口时需要指定已注册的窗口类型。
2012年11月02日 18点11分
求正确窗口代码~
2012年11月03日 04点11分
字符串用TEXT宏扩起来,wc.lpszClassName = "窗口类名",创建窗口时CreateWindow(wc.lpszClassName, TEXT("窗口标题"), 后面没错。
2012年11月03日 05点11分
回复 yjryym :能不能给我写个实例代码呢,我改了也不行哦
2012年11月03日 06点11分
level 1
盖世家族 楼主
//@yiryym//LH_Mouse_Ex谢谢各位,我是刚开始学的,这些代码我都抄下来运行得了,我才细细研究,所以请明示哪些要换要改,我再究
2012年11月03日 02点11分 5
level 8
首先你定义窗口类时没有指定类名,其次创建窗口时没有搞明白窗口类名参数。
2012年11月03日 03点11分 6
我是照着教程抄的,为啥他可以运行,我运行就没窗口的
2012年11月03日 04点11分
回复@盖世家族 :定义一个窗口类必须给lpclassname赋一个名字啊,就是给你的窗口类具体起个名字以便在创建窗口时使用,你的程序里却把它赋了一个NULL值,当然不会产生窗口啦
2012年11月03日 05点11分
回复 warxiaojiang :好,我改改试试
2012年11月03日 05点11分
回复 warxiaojiang :加了名字还是没有窗口产生,应该怎么?
2012年11月03日 05点11分
level 1
盖世家族 楼主
同是vc6 代码我核查几遍了,他运行有窗,我运行有进程没框,他系统2003我win7
2012年11月03日 04点11分 7
level 1
盖世家族 楼主
不如大侠们重新给我一段代码好吗 ? 就像我写的只有窗口标题那样的程序
2012年11月03日 06点11分 8
level 14

///
LPTSTR lpCmdLine

命令行参数
///
INT nShowCmd

窗口运行状态
///
INT APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, INT nShowCmd)
{
//
窗口标题
const LPTSTR Title = TEXT("
应用程序窗口标题
");

WNDCLASS wc = {};
//
窗口类风格
wc.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
//
窗口函数
wc.lpfnWndProc = WndProc;
//
实例句柄

2012年11月04日 00点11分 10
level 14

wc.hInstance = hInstance;
//
窗口类名
wc.lpszClassName = TEXT("窗口类名");
//
背景画刷(按钮表面)
wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
//
光标句柄
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
//
注册窗口类
RegisterClass(&wc);

//
创建窗口
HWND hWnd = CreateWindow(wc.lpszClassName, Title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
//
显示窗口
ShowWindow(hWnd, nShowCmd);

2012年11月04日 00点11分 11
level 14

//
更新窗口
UpdateWindow(hWnd);

MSG wMsg;
//
获取消息
while(GetMessage(&wMsg, NULL, WM_NULL, WM_NULL))
{
//
将按键消息转换为字符消息并投放到消息队列中
TranslateMessage(&wMsg);
//
调用窗口函数处理消息
DispatchMessage(&wMsg);
}
//
返回
PostQuitMessage
指定的退出码
return INT(wMsg.wParam);
}

2012年11月04日 00点11分 12
level 14


///
///
窗口函数
///
///
参数:
///
HWND hWnd

窗口句柄
///
UINT uMsg

消息类型
///
WPARAM wParam

消息参数
///
LPARAM lParam

消息参数
2
///
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
//
筛选消息
switch(uMsg)
{
//
创建消息

2012年11月04日 00点11分 13
level 14

case WM_CREATE:
//
这里写初始化代码
break;
//
重绘消息
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hWnd, &ps);
//
这里写绘图代码
EndPaint(hWnd, &ps);
break;
}
//
销毁消息
case WM_DESTROY:
//
这里写释放代码

2012年11月04日 00点11分 14
level 14

//
退出消息循环并指定退出码
PostQuitMessage(0);
break;
//
其它消息
default:
//
调用缺省窗口函数
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
//
返回默认值
return LRESULT();
}

2012年11月04日 00点11分 15
1