孙鑫第一章的四个简单问题

springlie 2008-09-14 10:57:47
最近在看孙鑫的那本VC书。第一章的几个问题拿来请教大家。

1 WNDCLASS的成员hCursor如果为NULL,会是什么样子?第一:系统默认Cursor。第二:无论何时鼠标进入到应用程序窗口中,应用程序都必须明确地设置光标的形状。前者是我自己认为的。后者是书上的原话,请问二者哪个正确?“明确设置光标形状”此话怎讲?

2 WNDCLASS的成员hbrBackground是用来指定背景画刷句柄的。当系统重绘时,系统使用哪个这里指定的画刷来擦除窗口的背景。“用某个画刷擦除背景”是什么意思?请形象点说明 :)

3 HCURSOR、HBRUCH、HGDIOBJ等虽然归根到底都是pvoid类型,但是在使用时还要根据实际情况相互强制转换。这在编译器中又是如何辨别的?或者说,这其中是种怎样的机制?

4 #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | \

WS_CAPTION | \

WS_SYSMENU | \

…… )
以上宏定义中的“\”是什么东西,在C/C++标准中出现过么?好像没有见过- -

期待大家精妙的、认真的指点,谢谢!




...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyhunu 2008-09-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 springlie 的回复:]
谢谢楼上几位,1.2.3题都明白了。

引用 3 楼 wqvbjhc 的回复:
引用 2 楼 springlie 的回复:

第4个问题补充:在C/C++中,不是所有的空格和换行都可以用一个空格代替么?为什么还需要续行符?这个续行符是标准中的么?或者只存在于宏的定义中?

换行可用一个空格代替,没有这个标准吧,不知LZ在哪看到的.续行符就是说你的代码一行写了太长了,不美观,要写成几行才美观些,所以用到续行符.编译的时候编译器就会把有续行符的…
[/Quote]

看来你还没搞清楚#define得用法,必须只能在一行里定义!程序语句则是以;号结尾,所以几行分开写没问题。
it2911 2008-09-15
  • 打赏
  • 举报
回复
还有建议新学c/c++的同学还是系统的看看c/c++的教材,因为孙鑫的是复习用的,运算符重载都没有吧
it2911 2008-09-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 skyhunu 的回复:]
引用 6 楼 springlie 的回复:
谢谢楼上几位,1.2.3题都明白了。

引用 3 楼 wqvbjhc 的回复:
引用 2 楼 springlie 的回复:

第4个问题补充:在C/C++中,不是所有的空格和换行都可以用一个空格代替么?为什么还需要续行符?这个续行符是标准中的么?或者只存在于宏的定义中?

换行可用一个空格代替,没有这个标准吧,不知LZ在哪看到的.续行符就是说你的代码一行写了太长了,不美观,要写成几行才美观些,所以用到续行符.编…
[/Quote]

第一行不应该是#ifndef么?先判断是否定义过
wqvbjhc 2008-09-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 springlie 的帖子:]
2 WNDCLASS的成员hbrBackground是用来指定背景画刷句柄的。当系统重绘时,系统使用哪个这里指定的画刷来擦除窗口的背景。“用某个画刷擦除背景”是什么意思?请形象点说明 :
[/Quote]
系统会用hbrBackground里的画刷来擦除窗口听背景.“用某个画刷擦除背景”就是把背景变成某个画刷里的内容就对了
wqvbjhc 2008-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 springlie 的回复:]

第4个问题补充:在C/C++中,不是所有的空格和换行都可以用一个空格代替么?为什么还需要续行符?这个续行符是标准中的么?或者只存在于宏的定义中?
[/Quote]
换行可用一个空格代替,没有这个标准吧,不知LZ在哪看到的.续行符就是说你的代码一行写了太长了,不美观,要写成几行才美观些,所以用到续行符.编译的时候编译器就会把有续行符的几行看成一行的.
springlie 2008-09-14
  • 打赏
  • 举报
回复
楼上师兄。
第1个问题清楚了。
第4个问题补充:在C/C++中,不是所有的空格和换行都可以用一个空格代替么?为什么还需要续行符?这个续行符是标准中的么?或者只存在于宏的定义中?
visame 2008-09-14
  • 打赏
  • 举报
回复
typedef struct {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCTSTR lpszMenuName;
LPCTSTR lpszClassName;
} WNDCLASS, *PWNDCLASS;
hCursor
Handle to the class cursor. This member must be a handle to a cursor resource. If this member is NULL, an application must explicitly set the cursor shape whenever the mouse moves into the application's window.
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);

\ 续行符
springlie 2008-09-14
  • 打赏
  • 举报
回复
回楼上,MinGW测试通过。输出结果为6.

#include "stdio.h"

int main()
{
int i;
i =
5
+
1;
printf("%d",i);
getchar();
getchar();

}
菜牛 2008-09-14
  • 打赏
  • 举报
回复
你可以试试看再说
springlie 2008-09-14
  • 打赏
  • 举报
回复
谢谢楼上几位,1.2.3题都明白了。

[Quote=引用 3 楼 wqvbjhc 的回复:]
引用 2 楼 springlie 的回复:

第4个问题补充:在C/C++中,不是所有的空格和换行都可以用一个空格代替么?为什么还需要续行符?这个续行符是标准中的么?或者只存在于宏的定义中?

换行可用一个空格代替,没有这个标准吧,不知LZ在哪看到的.续行符就是说你的代码一行写了太长了,不美观,要写成几行才美观些,所以用到续行符.编译的时候编译器就会把有续行符的几行看成一行的.
[/Quote]

4题,比如这样一种情况:

j = i + 5;

这句话我写成

j =

i

+

5;
这样不是编译器也可以通过么?我所说的换行可用一个空格代替就是这个意思。所以不明白续行符号存在的意义。
jia_xiaoxin 2008-09-14
  • 打赏
  • 举报
回复
系统用hbrBackground这个画刷重画背景。
"用某个画刷擦除背景"
指的是HBRUSH用某种颜色或位图在背景上平铺显示。

HCURSOR、HBRUCH、HGDIOBJ跟Widnows等都是Windows句柄
句柄从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述表句柄),HICON(图标句柄)等等,都是为了引用相应的对象。

16,467

社区成员

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

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

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