读完 《c primer plus》 后的一些想法与疑惑

会瞬移的猪 2019-01-11 06:50:40
本小白马上就要读完《c primer plus》了,想写一些软件练练手,但奈何不懂windows,并且不打算马上开始学习操作系统概念和计算机组成与设计。所以就有了
疑惑1:有哪些书籍或学习资料介绍了(本小白目前使用的是win10)windows基本操作(如windows的基本组成,windows提供的服务,dos命令等),因为用搜索引擎搜索出来的东西太乱了,且大多不是我想要的,所以希望大家能够指点一二。

对未来(也许是几个月)的规划是这样的:
1.学习Web开发(html,css,JavaScript),HTTP协议,Wireshark网络分析;
2.了解Windows API(因为听说想用c写出GUI需要会Windows API)。
(算法和数据结构目前我能用上的地方不多,所以暂时不深入学习)
(本小白的英语水平不高,估计4级是过不了的,但是觉得目前用上的地方不多,所以也暂时不深入学习)

疑惑2:这样规划合理吗?



全身家当只有60积分了,希望大家不要嫌弃。。。
...全文
402 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
w55100 2019-01-20
  • 打赏
  • 举报
回复
第2点,应该不用特意去学api再学gui。直接上手,mfc或者qt二选一。这两个关键词你丢到百度里就有很多相关的书籍了。
ooolinux 2019-01-20
  • 打赏
  • 举报
回复
仅供参考:
C++ Builder是什么?RAD开发工具~。分享几个C++ Builder资源
https://bbs.csdn.net/topics/392493823
会瞬移的猪 2019-01-17
  • 打赏
  • 举报
回复
引用 3 楼 ooolinux 的回复:
一些较老的操作系统书有讲Windows NT的组成框图,新的我就不清楚了。
Windows服务,很多博客都有。
常用DOS命令,百度都有。
其实这些对你“写一些软件练练手”用处不大,倒是可以了解一下EasyX,写点小游戏玩玩,对实践很有帮助。


谢谢。
ooolinux 2019-01-12
  • 打赏
  • 举报
回复
windows操作系统基础知识 API+DLL
2017年11月30日 20:07:57 ShellMeShell丶 阅读数:964
版权声明:本文为博主原创文章,转载记得附上原链接哟~已更新博客地址showmeshell.top https://blog.csdn.net/Everywhere_wwx/article/details/78680312
windows操作系统
1.Win API简介
API:Application Programming Interface(应用程序接口)
API函数构筑了整个windows框架的基石,下面是操作系统的操作系统的核心,而它上面则是windows应用程序。

用于16位版本windows的API——>win16
用于32位版本windows的API——>win32(windows 9x/NT/2000/XP/2003
1
2

windows9x是16+32位混合体,windowsNT/2000/XP纯32位
API函数调用从win16到win32的转变中保持兼容,并在功能和数量上不断增强。

**windows 9x/NT/2000/XP/2003的工作方式
windows NT/2000/xp win16函数调用通过一个转换层被转化为win32函数调用,然后被操作系统处理。
windows 9x 相反,win32函数调用转换层转换为win16位函数调用,再由操作系统处理。

2.操作系统运转核心:动态链接
windows提供了应用程序可利用的丰富的函数调用,这些函数采用动态链接库(DLL)

早期的windows的主要部分只需要在三个动态链接库中实现,代表了windows三个主要子系统:Kernel,User,GDI

Kernel(16位KRNL386.EXE+32位KERNEL32.DLL实现):操作系统核心功能服务,包括进程与线程控制,内存管理,文件访问;

User(16位USER.EXE+32位USER32.DLL实现):负责处理用户接口,包括键盘和鼠标输入,窗口和菜单管理;

GDI(16位GDI.EXE+32位GDI32.DLL实现):图形设备接口,允许程序在屏幕和打印机上显示文本和图形;
还有其他很多 比如:

ADVAPI32.DLL:对象安全性,注册表操作
COMCTL32.DLL:通用控件
COMDLG32.DLL:公共对话框
SHELL32.DLL:用户界面外壳
DIBENG.DLL:图形引擎
NETAPI32.DLL:网络

3.常用win32API函数:
API函数区分字符集:A表示ANSI,W表示widechars即(unicode)
1.hmemcpy函数

void hmemcpy(
void _huge* hpvDest, // 目的数据地址
void _huge* hpvSource,// 源数据地址
long cbCopy//// 数据大小 (字节)
);
1
2
3
4
5
这个函数位于KERNEL32.DLL中,它很常用,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。
注意:此函数只在Windows 9x系统上有效,在Win NT/2000系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。

2.GetWindowText函数
此函数在USER32.DLL用户模块中,它的作用是取得一个窗体的标题文字,或者一个文本控件的内容
函数原型:

int GetWindowText(
HWND hWnd, //窗口或文本控件句柄
LPTSTR lpString, //缓冲区地址
int nMaxCount //复制的最大字符数
);
1
2
3
4
5
16位:GetWindowText
32位:GetWindowTextA,GetWindowTextW

3.GetDlgItem函数:
此函数在USER32.DLL用户模块中,它的作用是获取指定对话框的句柄。
函数原型:

HWND GetDlgItem(
HWND hDlg, //对话框句柄
int nIDDlgItem //控件标识
);
1
2
3
4
4.GetDlgItemText函数:
此函数在USER32.DLL用户模块中,它的作用是获取对话框文本。
函数原型:

UINT GetDlgItemText(
HWND hDlg, // 对话框句柄
int nIDDlgItem, //控制标识(ID)
LPTSTR lpString, //文本缓冲区指针
int nMaxCount // 字符缓冲区的长度
);
1
2
3
4
5
6
16位:GetDlgItemText
32位:GetDlgItemTextA,GetDlgItemTextW

5.GetDlgItemInt函数:
此函数在USER32.DLL用户模块中,它的作用是获取对话框整数值。函数原型:

UNIT GetDlgItemInt(
HWND hDlg, //对话框句柄
int nIDDlgItem, //控件标识
BOOL *IpTranslated, //接受成功/失败指示的指针
BOOL bSigned //指定是有符号数还是无符号数
);
1
2
3
4
5
6
成功,IpTranslated ->true 返回文本对应的整数值;失败 false 返回值0

6.MessageBox函数
此函数是在USER32.DLL用户模块中,它的作用创建、显示信息框。
函数原型:

int MessageBox(
HWND hWnd, //父窗口句柄
LPCTSTR lpText, //消息框文本地址
LPCTSTR lpCaption, //消息框标题地址
UINT uType //信息框样式
);
1
2
3
4
5
6
16位:MessageBox
32位:MessageBoxA,MessageBoxW

4.句柄(Handle)
handle在windows中使用非常频繁,是windows标识,由应用程序建立或使用的对象所使用的一个唯一的整数值(通常32位)

5.windows 9x与unicode
windows 9x 系统上其他成百上千的函数只提供了接受unicode参数的进入点,但是这些函数并不将unicode字符串转化成ANSI字符串,只返回运行失败的消息。这些函数只有ANSi版本才能正常运行,所以,如果要为window9x系统开发软件,只能用ANSI版函数开发应用程序,unicode版本的程序在windows 9x下无法正常运行。

6.windows NT/2000/XP 与unicode
在NT架构下,win32API能接受unicode和ASCII两种字符,而其内核则使用unicode。
windows 2000/xp既支持unicode,也支持ANSI,所有新增和未过时的函数在windows 2000/xp中都同时拥有ANSI和unicode版本

7.windows消息机制
windows是一个消息(Message)驱动式系统,windows消息提供应用程序与应用程序之间,应用程序与windows系统之间进行通信的手段。
应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。
message——>系统消息队列——>拷贝——>应用程序队列——>检索发生——>窗口函数

windows常用的消息函数:
1.SendMessge函数
调用一个窗口的窗口函数,将一条消息发给那个窗口,除非消息处理完毕,否则该函数不会返回

LRESULT SendMessge(
HWND hwnd, //目的窗口的句柄
UINT Msg, //消息标志符
WPARAM wParam, //消息的WPARAM域
LPARAM lParam //消息的LPARAM域
);
1
2
3
4
5
6
2.WM_COMMAND消息
当用户从菜单或按钮中选择一条命令或者一个控件时发送给它的父窗口,或者当一个快捷键被释放时发送,(0111h)

WM_COMMAND
wNotifyCode=HIWORD(wParam);//通告代码
wID=LOWORD(wParam); //菜单条目,控制或快捷键的标识符
hwndCtl=(HWND) lParam; //控件句柄
1
2
3
4
5
3.WM_DESTROY消息
当一个窗口被破坏时发送,WM_DESTROY消息的十六进制是02h
无参数

4.WM_GETTEXT消息
应用程序发送一天WM_GETTEXT消息,将一个对应窗口的文本拷贝到一个呼叫程序提供的缓冲区中,(0Dh)

WM_GETTEXT
wParam=(WPARAM) cchTextMax; //需要拷贝的字符数
lParam=(LPARAM) lpszText; //接受文本的缓冲区地址
1
2
3
返回值:被拷贝的字符数

5.WM_QUIT消息
当应用程序调用PostQuitMessage函数时,生成消息WM_QUIT。(012h)

WM_QUIT
nExitCode=(int) wParam; //退出代码
1
2
6.WM_LBUTTONDOWN消息
当光标在一个窗口的客户区并且用户按下鼠标左键时,WM_LBUTTONDOWN消息被发送。如果鼠标动作未被捕获,这条消息被发送给光标下的窗口;否则,被发送给已经捕获鼠标动作的窗口。(0201h)

WM_LBUTTONDOWN
fwKeys=wParam; //key旗标
xPos=LOWORD(lParam); //光标的水平位置
yPos=HIWORD(lParam); //光标的垂直位置
1
2
3
4
8.保护模式简介:
在保护模式下,所有的应用程序都有权限级别(PL) 0~3
0特权级别最高。3最低
Ring0:操作系统核心层
Ring3:用户态,用户应用程序。

如想控制系统,就必须获得Ring0,比如调试工具SoftICE就是工作在0之上的。
ooolinux 2019-01-12
  • 打赏
  • 举报
回复
一些较老的操作系统书有讲Windows NT的组成框图,新的我就不清楚了。
Windows服务,很多博客都有。
常用DOS命令,百度都有。
其实这些对你“写一些软件练练手”用处不大,倒是可以了解一下EasyX,写点小游戏玩玩,对实践很有帮助。
会瞬移的猪 2019-01-12
  • 打赏
  • 举报
回复
引用 1 楼 ooolinux 的回复:
疑惑1:有哪些书籍或学习资料介绍了(本小白目前使用的是win10)windows的基本操作
——————
轻轻松松学电脑之类的,这种书书店里一大把。


首先谢谢你的回答,但是你的答案并不是我想要的(我在后面的括号中说明了:如windows的基本组成,windows提供的服务,dos命令等)
ooolinux 2019-01-11
  • 打赏
  • 举报
回复
疑惑1:有哪些书籍或学习资料介绍了(本小白目前使用的是win10)windows的基本操作
——————
轻轻松松学电脑之类的,这种书书店里一大把。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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