编程问题

编程问题
mWants |= NOTIF_SIGNAL;
中间的 |= 符号表示什么意思
第一次遇到这种|=组合符号
你只不过是写了InitInstance的实现,又没有调用它......既然没有调用它生成一个窗口,怎么会有东西出来呢...

C/C++你学过吗?学了多久了?
还有,我推唯滑荐windows编程、MFC程序设计,我推荐孙鑫老师的视频教程

下边是完整的代码,我用VS2010编译通过,正常运行

#include
//头文件

//而且你下边用的函数都没有在上面声明过
BOOL Init(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

HINSTANCE hInst;

//下边几个字符串常量都添加了TEXT()的宏
//用处是可让编译器帮你确定这里该有的类型,是Unicode还是ANSI

// 当前实例
TCHAR szTitle[]=TEXT("Windows编程技术01章01例");//这里 TEXT()
// 标题栏文本
TCHAR szWindowClass[]=TEXT("EX0101"); //这里 TEXT()
// 主窗口类名
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MyPrint(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK MyPrint(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

//WinMain函数
//这里不是CALLBACK,而是WINAPI,在我的VS2010里编译是不过的
//另外第三个参数的类型和文档里指败腊边也不一样啊,LPTSTR->LPSTR
// int /*CALLBACK*/WINAPI WinMain(HINSTANCE hInstance,
// HINSTANCE hPrevInstance,
// LPTSTR lpCmdLine,
// int nCmdShow)
// {

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
MSG msg;

// WNDCLASS wc; //这两行在Init函数中实现的
// wc.hInstance=hInstance; //这里可以删掉

Init(hInstance);

// 执行应用程序初始化:
if (!InitInstance(hInstance,nCmdShow))
{
return FALSE;
}

// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}

//注册窗口类
BOOL Init(HINSTANCE hInstance)//?注意什么与下面对比
{
WNDCLASSEX wc;

wc.cbSize = sizeof(WNDCLASSEX);

wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = NULL;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = szWindowClass;
wc.hIconSm = NULL;

return RegisterClassEx(&wc);
}

//枯庆建立窗口
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // 将实例句柄存储在全局变量中

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, 400, 250, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

//窗口函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_PAINT:
MyPrint(hWnd,message, wParam, lParam);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

//窗口内的输出
LRESULT CALLBACK MyPrint(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

PAINTSTRUCT ps;
HDC hdc;
hdc = BeginPaint(hWnd, &ps);
::TextOut(hdc,100,100,TEXT("手工的编写Windows程序!"),lstrlen(TEXT("手工的编写Windows程序!")));
//和前边一样,不知道用什么字符串类型的时候就加上TEXT()
EndPaint(hWnd, &ps);
return 0;
}
只见过 != ,没见过|= 。楼主搞错了吧。
← 上一篇: 下一篇: →