现在还有人用vim吗,我注定是职业程序员,现在有那么多编辑器,vim神一样的地位被撼动了吗

现在还有人用vim吗,我注定是职业程序员,现在有那么多编辑器,vim神一样的地位被撼动了吗,第1张

主要是现在 IDE 用的人更多。仅就编辑器来讲,肯定是超不过 vim。

但 vim 很难配置。比如在 IDE 里,一般鼠标悬停在某个函数上,它的文档就会出现。启举陆如果是 c 语言,vim 可以反查头文件找函数原型,很方便。或者 c 语言有成熟的 info 或者 man 手册,vim 也能与它们交互。

但您工作的环境可能就没这理想。vim 编译,运行,调试的所有框架都需要自己建立。当然常用的开发语言和开发环境有大家开发好的插件,但需要逐渐适应。而且除了圈悄顷子里的人,很难给你支招。比如我虽然懂 vim,但我不用 python 写程序,就没办法对 python 的开发环境提出建设性意见。

我的意思是说,如果您对使用 vim 有很多心得。那么您可能需要花一些时间把自己需要的开发环境搭建起来。如果您是职业程序员,并且工作比较稳定(意思是开发环境不会频繁变换),那么一劳永逸地搭建起来,将来可以逐渐积累。这样用 vim 是很有优势的,最重要的是效率高。

但如果您对 vim 了解不深,或者对开发环境不熟悉。那么搭建这么一个环境可能十分艰辛,甚至让您觉得沮丧。这时直接选择 ide 也是不错的。因为教程之类的资源更丰富一点。效率低一些也可以接受。等充分熟悉了,愿意再往答斗 vim 转也可行。

最后,个人习惯应该是起决定性作用的。因为程序员大多都不怕折腾。

光电鼠?现在的系统里,鼠标是由此唤系统直接认的,不用装驱动,除非你装了98之类的老系统。

如果你发现鼠标用不了了,首先应该检查你的鼠标是不是插松了。

如果是PS/2的圆口鼠标,发现掉了或者接口松了的时候应该先关电脑再插好,然后开机。如果是USB的没关系,拨掉再森尘凯插上,就能认出来了。

其次是看你电脑兄做是不是中了一些对鼠标指针起作用的病毒。

另外的可能就是鼠标损坏了。

楼主无法解决该问题,从解决问题的能力上有两点不足:

1)不会使用 MSDN,一定要多参考MSDN。

2)楼主对WINDOWS编程不熟悉,MFC不是用来启弊悄学习的,MFC是让职业程序员在做开发时,

对于原来大量需要调用的API调用和一些基本功能模块进行了包装,简化程序员的编码,提高工作效率。学习的话,只能从最底层的API调用开始学习。这个是VC程序员的悲哀,VB,C#不需要关注太多WINDOWS编程的底层细节,VC.NET同样也不需要关注太多。只有用MFC的程序员,必须了解所有底层的机制。

这里,我自己写了一个针对楼主帖子的代码示例,是WIN32的,没有使用MFC,其中用编号给出的注释,是要实现位图加文本按卜举钮的必须步骤,否则程序无法获得需要的效果。在最后,我指出楼主MFC中的一个问题,可能是这个原因,当然,任何其它情况都会阻碍程序的实现。楼主没有代码,我不知道楼主悄渣是否还有其它问题。

#include <windows.h>

#include <tchar.h>

#include <windowsx.h>

class IconButton {

public:

IconButton(HWND hParent, LPRECT prcPos) {

// 按钮在不同状态下显示的文本

m_pszHover = _T("hover")

m_pszLeave = _T("leave")

m_pszPressed = _T("pressed")

// 按钮在不同状态下显示的图标

m_hIconHover = LoadIcon(NULL, IDI_INFORMATION)

m_hIconLeave = LoadIcon(NULL, IDI_QUESTION)

m_hIconPressed = LoadIcon(NULL, IDI_WARNING)

// 2)按钮的样式不能指定 BS_ICON 或 BS_BITMAP 或两者。

m_hButton = CreateWindowEx(WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR|WS_EX_NOPARENTNOTIFY,

_T("Button"), m_pszLeave,

WS_CHILD|WS_VISIBLE|WS_GROUP|WS_TABSTOP|BS_TEXT,

prcPos->left, prcPos->top,

prcPos->right - prcPos->left, prcPos->bottom - prcPos->top,

hParent,

NULL,

GetModuleHandle(NULL),

NULL)

// 按钮原来的消息处理函数

m_pfnOldProc = (WNDPROC)SetWindowLongPtr(m_hButton, GWLP_WNDPROC, (LONG_PTR)BtnProc)

SetWindowLongPtr(m_hButton, GWLP_USERDATA, (LONG_PTR)this)

m_bHover = FALSE

SendMessage(m_hButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)m_hIconLeave)

}

private:

// 一些API调用时会重复使用的参数,将它们保存为类成员

HWND m_hButton

HICON m_hIconHover

HICON m_hIconLeave

HICON m_hIconPressed

LPCTSTR m_pszHover

LPCTSTR m_pszLeave

LPCTSTR m_pszPressed

WNDPROC m_pfnOldProc

BOOL m_bHover

static LRESULT BtnProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

LRESULT lRet

IconButton *pib = (IconButton*)GetWindowLongPtr(hWnd, GWLP_USERDATA)

switch (uMsg) {

case WM_MOUSEMOVE:

if (!pib->m_bHover) {

/*

WM_MOUSELEAVE 是当鼠标离开窗口,窗口会收到的消息,

该消息并不是自动由 Windows *** 作系统发送到线程消息队列中的,

而是需要程序员在代码中调用 TrackMouseEvent ,

只有这样, *** 作系统才会把 WM_MOUSELEAVE 消息发送到线程消息队列中。

*/

TRACKMOUSEEVENT tme = { sizeof(tme) }

tme.dwFlags = TME_LEAVE

tme.hwndTrack = pib->m_hButton

TrackMouseEvent(&tme)

pib->m_bHover = TRUE

pib->SetButton(pib->m_pszHover, pib->m_hIconHover)

}

lRet = 0

break

case WM_MOUSELEAVE:

pib->m_bHover = FALSE

pib->SetButton(pib->m_pszLeave, pib->m_hIconLeave)

lRet = 0

break

case WM_LBUTTONDOWN:

pib->SetButton(pib->m_pszPressed, pib->m_hIconPressed)

lRet = 0

break

case WM_LBUTTONUP:

pib->SetButton(pib->m_pszHover, pib->m_hIconHover)

lRet = 0

break

default:

lRet = (*pib->m_pfnOldProc)(hWnd, uMsg, wParam, lParam)

break

}

return lRet

}

void SetButton(LPCTSTR pszText, HICON hIcon) {

Button_SetText(m_hButton, pszText)

/*

3)设置按钮图标并启用文本,第二个参数是 BM_SETIMAGE,

第三个参数是 IMAGE_ICON ,如果是位图,第三个参数是 IMAGE_BITMAP ,

第四个参数是图标或位图句柄。

*/

SendMessage(m_hButton, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon)

}

}

LRESULT CALLBACK NormalProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {

LRESULT lRet

switch (uMsg) {

case WM_CLOSE:

PostQuitMessage(0)

lRet = 0

break

default:

lRet = DefWindowProc(hWnd, uMsg, wParam, lParam)

}

return lRet

}

HWND CreateNormalWindow() {

WNDCLASS wc = { 0 }

wc.hInstance = GetModuleHandle(NULL)

wc.lpfnWndProc = NormalProc

wc.lpszClassName = _T("ButtonTestWndClass")

wc.style = CS_HREDRAW | CS_VREDRAW

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH)

wc.hCursor = LoadCursor(NULL, IDC_ARROW)

RegisterClass(&wc)

return CreateWindow(_T("ButtonTestWndClass"), _T("Button Test Window"),

WS_OVERLAPPEDWINDOW | WS_VISIBLE,

CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0,

NULL,

NULL,

GetModuleHandle(NULL),

NULL)

}

int APIENTRY _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) {

/*

1)启用可视化样式,在WIN32编程中,

向导不会为我们启用可视化样式给出向导创建的代码。

在MFC中,启用可视化样式是MFC工程创建向导默认给出的。

在此也就没有必要给出我自己写的 zInitVisualStyle 的代码了。

*/

zInitVisualStyle(ICC_WIN95_CLASSES)

HWND hWnd = CreateNormalWindow()

RECT rc = { 0, 0, 200, 40 }

IconButton ib(hWnd, &rc)// 有关图标文本按钮的类

UpdateWindow(hWnd)

BOOL bQuit = FALSE

MSG msg

while (!bQuit) {

if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {

if (msg.message == WM_QUIT) {

bQuit = TRUE

continue

}

TranslateMessage(&msg)

DispatchMessage(&msg)

}

}

return msg.wParam

}

楼主的问题第一个就是“按钮的bitmap属性已经改为TRUE”,这个在我的代码中的第二个注释中已经说明。“按钮的bitmap属性已经改为TRUE”意味着设置了按钮的 BS_BITMAP 样式。其次,根据楼主已有的信息,我不知道为何要知道坐标,计算坐标,它们用来干吗的?

真正做职业软件的,涉及到换肤的话,都是用底层WIN32做自己的包装类,就如以上我给出的IconButton,没人会去用MFC作换肤。还是那句话那时如日中天的MFC是做快速开发只用的,兼顾软件项目开发效率和程序运行效率,这两者。但,就我的理解,目前的MFC处境非常尴尬,论程序运行效率,MFC肯定比不上纯粹的WIN32:

1、MFC占更多的内存

2、执行更多的代码

3、生成的文件尺寸更大,还需要依赖MFC库,不利于软件部署。

从快速开发的角度而言,肯定是MFC比WIN32来得效率高,WIN32是要写死人的,而且调试也远比MFC来得困难,但是与此同时,使用C#或VB进行.NET开发,MFC根本比不上.NET的开发效率,若论做界面的话,新崛起的WPF可以做出非常炫的界面(甚至用“让人吃惊”来形容)。

因此,MFC现在是一种高不成(不如C#、VB)低不就(WIN32)的尴尬局面。MFC的路越走越窄。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12467020.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存