您的位置:首页 > 其它

我的第一个windows程序

2009-10-21 16:34 204 查看
今天下午本来是有课来着,是通信电子电路,现在是在是不喜欢这方面的东西了,然后在宿舍写程序,我上个礼拜买了一本windows程序设计,就是charles Petzold的英文版的,看了三章了,实践很重要,决定写一个windows程序出来,看了孙鑫老师的视屏教程,开始写了,写好了后好多问题,最主要的是由于ASCII与Unicode而引起的,其实之前在Petzold的书上看到过一点相关知识,但是真正遇到问题还是不能解决,一些函数不知道,多谢csdn的兄弟们,再次谢谢!解决了我的问题,现在总结是这样的!

1。

然后在vs2008上编译产生了这样的错误!

1>------ Build started: Project: WinMain, Configuration: Debug Win32 ------

1>Compiling...

1>WinMain.cpp

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(27)
: error C2440: '=' : cannot convert from 'const char [11]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(45)
: error C2664: 'CreateWindowExW' : cannot convert parameter 2 from
'const char [11]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(47) : error C2065: 'SW_SHOWNOMAL' : undeclared identifier

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(72)
: error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'char
[20]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(75)
: error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const
char [23]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(78)
: error C2664: 'TextOutW' : cannot convert parameter 4 from 'const char
[20]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(85)
: error C2664: 'TextOutW' : cannot convert parameter 4 from 'const char
[18]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>e:/mystudyresource/学习记录/windows编程/winmain/winmain/winmain.cpp(89)
: error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const
char [19]' to 'LPCWSTR'

1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

1>Build log was saved at "file://e:/MyStudyResource/学习记录/windows编程/WinMain/WinMain/Debug/BuildLog.htm"

1>WinMain - 8 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这个就是由于ASCII和Unicode的问题引起的,第一个程序就遇到这个问题,还是很幸运的,以后就会注意了!

注意到了MessageBox和TextOut都是有多种表示的,它们里面的参数直接加上L就能够解决!在最开始我就给都加上了L,但是还是出现了问题,这个问题就是问题2!

2.

sprintf函数,这个函数加上后就会出现不匹配的问题,据网友得知,这个函数的宽字符形式为:swprintf

我重新定义了szChar,wchar_t szChar;

这样szChar就是宽字符型了,然后用swprintf函数,swprintf(szChar,L"char is %d",wParam);

还有一个函数是我自己发现的,呵呵,兴奋!就是strlen这个函数,在这儿当然也是不可以用的,我在书上见到过这个函数的宽字符型,wcslen,然后这样程序就算全部转成了Unicode型的!运行通过,兴奋啊!呵呵,代码贴出来:

#include<windows.h>

#include<stdio.h>

LRESULT CALLBACK winmainpro(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

);

int WINAPI WinMain(

HINSTANCE hInstance, // handle to current instance

HINSTANCE hPrevInstance, // handle to previous instance

LPSTR lpCmdLine, // pointer to command line

int nCmdShow // show state of window

)

{

WNDCLASS wndcls;

wndcls.cbClsExtra=0;

wndcls.cbWndExtra=0;

wndcls.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);

wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);

wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);

wndcls.hInstance=hInstance;

wndcls.lpfnWndProc=winmainpro;

wndcls.lpszClassName=L"weiwenjing";

wndcls.lpszMenuName=NULL;

wndcls.style=CS_HREDRAW|CS_VREDRAW;

RegisterClass(&wndcls);

HWND hwnd;

hwnd=CreateWindow(

L"weiwenjing", // pointer to registered class name

L"weiwenjing", // pointer to window name

WS_OVERLAPPEDWINDOW, // window style

0, // horizontal position of window

0, // vertical position of window

600, // window width

400, // window height

NULL, // handle to parent or owner window

NULL, // handle to menu or child-window identifier

hInstance, // handle to application instance

NULL // pointer to window-creation data

);

ShowWindow(hwnd,SW_SHOWNORMAL);

UpdateWindow(hwnd);

MSG msg;

while(GetMessage(&msg,hwnd,0,0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

LRESULT CALLBACK winmainpro(

HWND hwnd, // handle to window

UINT uMsg, // message identifier

WPARAM wParam, // first message parameter

LPARAM lParam // second message parameter

)

{

switch(uMsg)

{

case WM_CHAR:

wchar_t szChar[20];

swprintf(szChar,L"char is %d",wParam);

MessageBox(hwnd,szChar,L"iloveyou",0);

break;

case WM_LBUTTONDOWN:

MessageBox(hwnd,L"left button is checked",L"iloveyou",0);

HDC hdc;

hdc=GetDC(hwnd);

TextOut(hdc,0,50,L"第一个程序,happy !",wcslen(L"第一个程序,happy !"));

ReleaseDC(hwnd,hdc);

break;

case WM_PAINT:

HDC hDC;

PAINTSTRUCT ps;

hDC=BeginPaint(hwnd,&ps);

TextOut(hDC,0,0,L"windows编程第一课",wcslen(L"windows编程第一课"));

EndPaint(hwnd,&ps);

break;

case WM_CLOSE:

if(IDYES==MessageBox(hwnd,L"是否真的退出窗口!",L"iloveyou",MB_YESNO))

{

DestroyWindow(hwnd);

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

default:

return DefWindowProc(hwnd,uMsg,wParam,lParam);

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: