Бывалый

Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006
Репутация: нет Всего: 1
|
Я взял пример из книги- он работает, ошибки нету. Но сделав свою программу она у меня выдает ошибку: RichEdit.cpp D:\RichEdit\RichEdit.cpp(458) : error C2664: '_lwrite' : cannot convert parameter 2 from 'unsigned char *' to 'const char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast Error executing cl.exe. RichEdit.exe - 1 error(s), 0 warning(s) Откуда ошибка, если код из книги компилируеться нормально, а мой не хочет? | Код | #include <windows.h> #include <windowsx.h> #include <commctrl.h> #include <richedit.h> #include "resource.h" #include "afxres.h"
LRESULT CALLBACK MyWndProc (HWND, UINT, WPARAM, LPARAM) ; DWORD CALLBACK OpenCallback(DWORD, LPBYTE, LONG, LONG*); DWORD CALLBACK SaveCallback(DWORD, LPBYTE, LONG, LONG*); void FileOpen(HWND); void FileSaveAs(HWND);
HINSTANCE hInstance; HINSTANCE hInst; HWND hRichEdit;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "My" ; HWND hwnd ; MSG msg ; WNDCLASSEX wndclass ;
wndclass.cbSize = sizeof (wndclass) ; wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = (WNDPROC)MyWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = DLGWINDOWEXTRA ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW) ; wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName ; wndclass.hIconSm = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1)) ;
RegisterClassEx (&wndclass) ;
hwnd=CreateDialog(hInstance, "My", 0, NULL); ShowWindow (hwnd, iCmdShow) ; UpdateWindow(hwnd); InitCommonControls(); hInst=hInstance;
while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
LRESULT CALLBACK MyWndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) {
HINSTANCE hLibrary; CHARFORMAT CharFormat; PARAFORMAT ParaFormat; HWND hRichEdit; CHOOSEFONT ChooseFontStructure; LOGFONT LogFont; HDC hDC;
switch (iMsg) { case WM_CREATE : hLibrary=LoadLibrary("riched32.dll");
return 0;
case WM_PAINT:
break;
case WM_DESTROY : FreeLibrary(hLibrary); PostQuitMessage (0) ; return 0 ; case WM_COMMAND:
if (LOWORD (wParam) == IDC_BUTTON1) { FreeLibrary(hLibrary); PostQuitMessage (0) ; return 0; break; }
if (LOWORD (wParam) == IDC_BUTTON2) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); CharFormat.cbSize=sizeof(CHARFORMAT); CharFormat.dwMask=CFM_BOLD; SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE, (LPARAM)&CharFormat); CharFormat.dwMask=CFM_BOLD; CharFormat.dwEffects^=CFE_BOLD; SendMessage(hRichEdit, EM_SETCHARFORMAT, SCF_SELECTION,(LPARAM)&CharFormat); break; }
if (LOWORD (wParam) == IDC_BUTTON3) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); CharFormat.cbSize=sizeof(CHARFORMAT); CharFormat.dwMask=CFM_ITALIC; SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE, (LPARAM)&CharFormat); CharFormat.dwMask=CFM_ITALIC; CharFormat.dwEffects^=CFE_ITALIC; SendMessage(hRichEdit, EM_SETCHARFORMAT, SCF_SELECTION,(LPARAM)&CharFormat); break; }
if (LOWORD (wParam) == IDC_BUTTON4) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); CharFormat.cbSize=sizeof(CHARFORMAT); CharFormat.dwMask=CFM_UNDERLINE; SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE, (LPARAM)&CharFormat); CharFormat.dwMask=CFM_UNDERLINE; CharFormat.dwEffects^=CFE_UNDERLINE; SendMessage(hRichEdit, EM_SETCHARFORMAT, SCF_SELECTION,(LPARAM)&CharFormat); break; }
if (LOWORD (wParam) == IDC_BUTTON5) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); CharFormat.cbSize=sizeof(CHARFORMAT); SendMessage(hRichEdit, EM_GETCHARFORMAT, TRUE, (LPARAM)&CharFormat); memset(&ChooseFontStructure,0,sizeof(CHOOSEFONT)); memset(&LogFont,0,sizeof(LOGFONT)); hDC=GetDC(hwnd); LogFont.lfHeight=CharFormat.yHeight/-20; if(CharFormat.dwEffects&CFE_BOLD) LogFont.lfWeight=FW_BOLD; else LogFont.lfWeight=FW_NORMAL; LogFont.lfItalic=(BOOL)(CharFormat.dwEffects&CFE_ITALIC); LogFont.lfUnderline=(BOOL)(CharFormat.dwEffects&CFE_UNDERLINE); LogFont.lfCharSet=DEFAULT_CHARSET; LogFont.lfQuality=DEFAULT_QUALITY; LogFont.lfPitchAndFamily=CharFormat.bPitchAndFamily; lstrcpy(LogFont.lfFaceName,CharFormat.szFaceName); ChooseFontStructure.lStructSize=sizeof(ChooseFontStructure); ChooseFontStructure.hwndOwner=hwnd; ChooseFontStructure.hDC=hDC; ChooseFontStructure.lpLogFont=&LogFont; ChooseFontStructure.Flags=CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT; ChooseFontStructure.rgbColors=RGB(0,0,0); ChooseFontStructure.nFontType=SCREEN_FONTTYPE; if(ChooseFont(&ChooseFontStructure)) { CharFormat.dwMask=CFM_BOLD|CFM_FACE|CFM_ITALIC|CFM_OFFSET|CFM_SIZE|CFM_UNDERLINE; CharFormat.yHeight=LogFont.lfHeight*-20; CharFormat.dwEffects=0; if(FW_BOLD==LogFont.lfWeight) CharFormat.dwEffects|=CFE_BOLD; if(LogFont.lfItalic) CharFormat.dwEffects|=CFE_ITALIC; if(LogFont.lfUnderline) CharFormat.dwEffects|=CFE_UNDERLINE; CharFormat.bPitchAndFamily=LogFont.lfPitchAndFamily; lstrcpy(CharFormat.szFaceName,LogFont.lfFaceName); SendMessage(hRichEdit,EM_SETCHARFORMAT,SCF_SELECTION,(LPARAM)&CharFormat); } ReleaseDC(hwnd,hDC); break; } if (LOWORD (wParam) == IDC_BUTTON6) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); ParaFormat.cbSize=sizeof(PARAFORMAT); ParaFormat.dwMask=PFM_ALIGNMENT; ParaFormat.wAlignment=PFA_LEFT; SendMessage(hRichEdit, EM_SETPARAFORMAT, 0, (LPARAM)&ParaFormat); break; }
if (LOWORD (wParam) == IDC_BUTTON7) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); ParaFormat.cbSize=sizeof(PARAFORMAT); ParaFormat.dwMask=PFM_ALIGNMENT; ParaFormat.wAlignment=PFA_RIGHT; SendMessage(hRichEdit, EM_SETPARAFORMAT, 0, (LPARAM)&ParaFormat); break; } if (LOWORD (wParam) == IDC_BUTTON8) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); ParaFormat.cbSize=sizeof(PARAFORMAT); ParaFormat.dwMask=PFM_ALIGNMENT; ParaFormat.wAlignment=PFA_CENTER; SendMessage(hRichEdit, EM_SETPARAFORMAT, 0, (LPARAM)&ParaFormat); break; } if (LOWORD (wParam) == IDC_BUTTON9) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SendMessage(hRichEdit,EM_UNDO,0,0L); break; } if (LOWORD (wParam) == IDC_BUTTON10) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SendMessage(hRichEdit,WM_CUT,0,0L); break; } if (LOWORD (wParam) == IDC_BUTTON11) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SendMessage(hRichEdit,WM_COPY,0,0L); break; }
if (LOWORD (wParam) == IDC_BUTTON12) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SendMessage(hRichEdit,WM_PASTE,0,0L); break; }
if (LOWORD (wParam) == IDC_BUTTON13) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SendMessage(hRichEdit,WM_CLEAR,0,0L); break; }
if (LOWORD (wParam) == IDC_BUTTON14) { CHARRANGE Charr; hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); Charr.cpMin=0; Charr.cpMax=-1; SendMessage(hRichEdit,EM_EXSETSEL,0,(LPARAM)&Charr); break; }
if (LOWORD (wParam) == IDC_BUTTON15) { hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1); SetWindowText(hRichEdit,"\0"); break; } if (LOWORD (wParam) == IDC_BUTTON16) { FileOpen(hwnd); // загружаем файл для редактирования return 0L; break; }
if (LOWORD (wParam) == IDC_BUTTON17) { FileSaveAs(hwnd); // сохраняем текст в файле return 0L; break; } } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; }
void FileOpen(HWND hwnd) { OPENFILENAME ofn; char szFile[256]; char szDirName[256]; char szFileTitle[256]; char szFilter[256] = "Rich Text Files\0*.rtf\0Text Files\0*.txt\0" "Any Files\0*.*\0";
HFILE hFile; OFSTRUCT of; EDITSTREAM es;
hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1);
memset(&ofn, 0, sizeof(OPENFILENAME)); GetCurrentDirectory(sizeof(szDirName), szDirName); szFile[0] = '\0';
// Подготавливаем структуру для выбора входного файла ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFilter = szFilter; ofn.lpstrInitialDir = szDirName; ofn.nFilterIndex = 1; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFileTitle = szFileTitle; ofn.nMaxFileTitle = sizeof(szFileTitle); ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// Выводим на экран диалоговую панель, предназначенную // для выбора входного файла if(GetOpenFileName(&ofn)) { // Если файл выбран, открываем его для чтения if (*ofn.lpstrFile) { hFile = OpenFile(ofn.lpstrFile, &of, OF_READ); // Устанавливаем параметры функции обратного вызова, // которая будет выполнять чтение es.dwCookie = (DWORD)hFile; es.dwError = 0; es.pfnCallback = OpenCallback;
// Если расширение файла rtf, файл загружается как // rtf-файл. В противном случае он загружается как // обычный текстовый файл _strupr(&ofn.lpstrFile[ofn.nFileExtension]); if(!strncmp(&ofn.lpstrFile[ofn.nFileExtension], "RTF", 3)) SendMessage(hRichEdit, EM_STREAMIN, SF_RTF, (LPARAM)&es); else SendMessage(hRichEdit, EM_STREAMIN, SF_TEXT, (LPARAM)&es);
// Закрываем файл _lclose(hFile);
// Сбрасываем признак изменения содержимого окна // редактора текста SendMessage(hRichEdit, EM_SETMODIFY, FALSE, 0L); } } }
// ----------------------------------------------------- // Функция OpenCallback // ----------------------------------------------------- DWORD CALLBACK OpenCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { // Выполняем чтение блока данных длиной cb байт *pcb = _lread((HFILE)dwCookie, pbBuff, cb); if(*pcb <= 0) *pcb = 0; return 0; }
void FileSaveAs(HWND hwnd) {
OPENFILENAME ofn; char szFile[256] = "untitled.rtf"; char szDirName[512]; char szFileTitle[256]; // Фильтр допускает сохранение текста в файле с // расширением имени rtf, txt, или любым другим char szFilter[256] = "Rich Text Files\0*.rtf\0Text Files\0*.txt\0" "Any Files\0*.*\0";
HFILE hFile; OFSTRUCT of; EDITSTREAM es;
hRichEdit=GetDlgItem(hwnd,IDC_RICHEDIT1);
memset(&ofn, 0, sizeof(OPENFILENAME)); // Определяем путь к текущему каталогу GetCurrentDirectory(sizeof(szDirName), szDirName); // Заполняем структуру для выбора выходного файла ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hwnd; ofn.lpstrFilter = szFilter; ofn.lpstrInitialDir = szDirName; ofn.nFilterIndex = 1; ofn.lpstrFile = szFile; ofn.nMaxFile = sizeof(szFile); ofn.lpstrFileTitle = szFileTitle; ofn.nMaxFileTitle = sizeof(szFileTitle); ofn.lpstrDefExt = "rtf"; ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY;
// Выводим на экран диалоговую панель, предназначенную // для выбора выходного файла if(GetSaveFileName(&ofn)) { // Если файл выбран, открываем его для записи или // создаем if (*ofn.lpstrFile) { hFile = OpenFile(ofn.lpstrFile, &of, OF_CREATE);
// Устанавливаем параметры функции обратного вызова, // которая будет выполнять запись es.dwCookie = (DWORD)hFile; es.dwError = 0; es.pfnCallback = SaveCallback; // Если расширение файла rtf, файл сохраняется как // rtf-файл. В противном случае он сохраняется как // обычный текстовый файл _strupr(&ofn.lpstrFile[ofn.nFileExtension]); if(!strncmp(&ofn.lpstrFile[ofn.nFileExtension], "RTF", 3)) SendMessage(hRichEdit, EM_STREAMOUT, SF_RTF, (LPARAM)&es); else SendMessage(hRichEdit, EM_STREAMOUT, SF_TEXT, (LPARAM)&es);
// Закрываем файл _lclose(hFile);
// Сбрасываем признак изменения содержимого окна // редактора текста SendMessage(hRichEdit, EM_SETMODIFY, FALSE, 0L); } } }
// ----------------------------------------------------- // Функция SaveCallback // ----------------------------------------------------- DWORD CALLBACK SaveCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) { // Выполняем запись блока данных длиной cb байт cb = _lwrite((HFILE)dwCookie, pbBuff, cb); *pcb = cb; return 0; }
|
|