Compare commits

..

26 Commits

Author SHA1 Message Date
Timo Kreuzer
f5e225dd3b Sync with trunk r66766
svn path=/branches/dib_rewrite/; revision=66768
2015-03-17 23:10:13 +00:00
Timo Kreuzer
516e2cc43d [DIBLIB]
Fix ROP operation by ANDing the result with the appropriate dest mask, for all required ROPs). Fixes MaskBlt tests.

svn path=/branches/dib_rewrite/; revision=60905
2013-11-09 19:32:12 +00:00
Timo Kreuzer
e8516eca35 Sync with trunk (r60786)
svn path=/branches/dib_rewrite/; revision=60828
2013-11-02 09:31:39 +00:00
Timo Kreuzer
194e3169b6 [WIN32K] Several fixes and improvements to NtGdiSetDIBitsToDeviceInternal and GreCreateDIBitmapInternal
[GDI32] "Fix" behavior of SetDIBitsToDevice, based on how (broken) Windows actually behaves
All tests for SetDIBitsToDevice now pass, except one, but this seems to be an Mm problem (looks like we commit ridiculously large user mode stacks instead of growing them on demand)

svn path=/branches/dib_rewrite/; revision=60788
2013-10-28 20:59:54 +00:00
Timo Kreuzer
72f1e50a9a [GDI32] Handle CBM_CREATDIB
[WIN32K] Make sure compressed DIBs have a bitmap size in the BITMAPINFOHEADER

svn path=/branches/dib_rewrite/; revision=59586
2013-07-25 21:03:14 +00:00
Timo Kreuzer
428150412d [WIN32K]
Fix some bugs related to DIB brushes.

svn path=/branches/dib_rewrite/; revision=59564
2013-07-23 15:31:43 +00:00
Timo Kreuzer
74a8fc4a83 [DIBLIB] Fix right-to-left SRCCOPY, silence a warning
[WIN32K] Improve EngBitBlt and EndCopyBits to properly handle device managed surfaces and support RLE compression.

svn path=/branches/dib_rewrite/; revision=59550
2013-07-21 20:33:10 +00:00
Timo Kreuzer
05374e6cb4 Try to merge with trunk (r59468)
svn path=/branches/dib_rewrite/; revision=59469
2013-07-13 13:42:42 +00:00
Timo Kreuzer
ac4d69e0e5 Add some optional files to bootcd
svn path=/branches/dib_rewrite/; revision=58317
2013-02-16 16:21:03 +00:00
Timo Kreuzer
8636a9e3d3 [WIN32K]
Add more ASSERTs

svn path=/branches/dib_rewrite/; revision=58061
2012-12-30 19:11:22 +00:00
Timo Kreuzer
80e30e05e8 [DIBLIB]
- Use memmove explicitly in Dib_BitBlt_SRCCOPY_EqSurf and use it for right-to-left copy as well.

svn path=/branches/dib_rewrite/; revision=58051
2012-12-30 12:32:00 +00:00
Timo Kreuzer
fb0060e616 Sync with trunk r58022
svn path=/branches/dib_rewrite/; revision=58023
2012-12-28 12:19:38 +00:00
Timo Kreuzer
33fa833042 [WIN32K/GDI32]
- Many changes and bugfixes to the new DIB code
It's in a usable state now, also working with the new diblib. Still lots of bugs and failures need to be fixed.

svn path=/branches/dib_rewrite/; revision=57078
2012-08-14 22:27:00 +00:00
Timo Kreuzer
df2fd2fd3c Sync trunk r57060
svn path=/branches/dib_rewrite/; revision=57061
2012-08-12 13:22:27 +00:00
Timo Kreuzer
698e524965 Sync trunk r56901
svn path=/branches/dib_rewrite/; revision=56902
2012-07-15 20:47:28 +00:00
Timo Kreuzer
b417fbcc66 [WIN32K]
- Mark bitmap as API bitmap in NtGdiCreateDIBSection
- Mark palette as DIB section palette in NtGdiCreateDIBSection
- Set biXPelsPerMeter to 0 instead of using the bitmap dimentions
- Check BITMAPINFO parameters in GreGetDIBits
- Handle case when requested bit depth doesn't match actual one in GreGetDIBits
- Use maximum BITMAPINFO size in NtGdiGetDIBitsInternal
- Verify header size in NtGdiGetDIBitsInternal
- Misc code improvements

svn path=/branches/dib_rewrite/; revision=56593
2012-05-16 14:13:26 +00:00
Timo Kreuzer
f806ab62fb [WIN32K]
Implement DC_bIsBitmapCompatible, which checks if a bitmap can be used with the DC in SelectBitmap or GetDIBits

svn path=/branches/dib_rewrite/; revision=56591
2012-05-15 16:52:21 +00:00
Timo Kreuzer
54747199af [WIN32K]
Halfplement GreCreateDIBitmapInternal

svn path=/branches/dib_rewrite/; revision=56569
2012-05-12 21:05:35 +00:00
Timo Kreuzer
fb3cfa8952 [WIN32K]
Move SURFACE_iCompression to surface.c and implement SURFACE_vSetPalette

svn path=/branches/dib_rewrite/; revision=56568
2012-05-12 20:42:22 +00:00
Timo Kreuzer
d5ecfd0434 [WIN32K]
- Fix RGB vs BGR mistake in SURFACE_iCompression
- Return the number of copied scanlines in GreGetDIBits
- Fix calculation of destination address in GreGetDIBits

svn path=/branches/dib_rewrite/; revision=56565
2012-05-12 17:40:58 +00:00
Timo Kreuzer
72d0eb760a [WIN32K]
Some work on NtGdiGetDIBitsInternal

svn path=/branches/dib_rewrite/; revision=56561
2012-05-10 19:28:53 +00:00
Timo Kreuzer
a33c59fba9 [WIN32K]
- Start of the rewrite for DIB bitmaps and sections
- Rewrite of brush code

svn path=/branches/dib_rewrite/; revision=56555
2012-05-09 20:36:16 +00:00
Timo Kreuzer
8ccaec4a4a Sync with trunk r56553
svn path=/branches/dib_rewrite/; revision=56554
2012-05-09 20:21:00 +00:00
Timo Kreuzer
79d909144f Merge r56543 - r56548
svn path=/branches/dib_rewrite/; revision=56549
2012-05-09 08:23:25 +00:00
Timo Kreuzer
28f1ad65a6 Sync with trunk r56543
svn path=/branches/dib_rewrite/; revision=56544
2012-05-08 18:11:09 +00:00
Timo Kreuzer
cb252654e2 [REACTOS]
Create a branch for DIB rewrite

svn path=/branches/dib_rewrite/; revision=56444
2012-04-29 11:09:08 +00:00
8925 changed files with 415553 additions and 810924 deletions

View File

@@ -11,11 +11,6 @@ if(POLICY CMP0026)
cmake_policy(SET CMP0026 OLD)
endif()
if(POLICY CMP0051)
# List TARGET_OBJECTS in SOURCES target property
cmake_policy(SET CMP0051 NEW)
endif()
project(REACTOS)
# Versioning
@@ -37,8 +32,8 @@ set(CMAKE_COLOR_MAKEFILE OFF)
#set_property(GLOBAL PROPERTY RULE_MESSAGES OFF)
set(CMAKE_SKIP_INSTALL_RULES ON)
if(NOT DEFINED NEW_STYLE_BUILD)
set(NEW_STYLE_BUILD TRUE)
if(NOT CMAKE_VERSION STREQUAL "2.8.12.1-ReactOS")
set(CMAKE_DISABLE_NINJA_DEPSLOG TRUE)
endif()
if(NOT ARCH)
@@ -65,25 +60,8 @@ include(cmake/compilerflags.cmake)
add_definitions(-D__REACTOS__)
if(MSVC_IDE)
add_compile_flags("/MP")
endif()
# We don't need CMake importlib handling.
# FIXME: Remove the MSVC_IDE condition when the upcoming RosBE lands.
if(NOT MSVC_IDE)
unset(CMAKE_IMPORT_LIBRARY_SUFFIX)
endif()
# Bison and Flex support
# include(cmake/bison-flex.cmake)
if(NOT CMAKE_CROSSCOMPILING)
if(NEW_STYLE_BUILD)
set(TOOLS_FOLDER ${CMAKE_CURRENT_BINARY_DIR})
endif()
add_definitions(-DTARGET_${ARCH})
if(MSVC)
@@ -106,23 +84,14 @@ if(NOT CMAKE_CROSSCOMPILING)
add_subdirectory(tools)
add_subdirectory(lib)
if(NOT NEW_STYLE_BUILD)
if(NOT MSVC)
export(TARGETS bin2c widl gendib cabman cdmake fatten hpp mkhive obj2bin spec2def geninc rsym mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
else()
export(TARGETS bin2c widl gendib cabman cdmake fatten hpp mkhive obj2bin spec2def geninc mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
endif()
if(NOT MSVC)
export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc rsym mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
else()
export(TARGETS bin2c widl gendib cabman cdmake mkhive obj2bin spec2def geninc mkshelllink utf16le FILE ${CMAKE_BINARY_DIR}/ImportExecutables.cmake NAMESPACE native- )
endif()
else()
if(NEW_STYLE_BUILD)
include(cmake/host-tools.cmake)
endif()
# Print build type
message("-- Build Type: ${CMAKE_BUILD_TYPE}")
# adjust the default behaviour of the FIND_XXX() commands:
# search headers and libraries in the target environment, search
# programs in the host environment
@@ -133,6 +102,10 @@ else()
#useful stuff!
include(CMakeParseArguments)
# Default to Debug for the build type
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING
"Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
# Do some cleanup
file(REMOVE
${REACTOS_BINARY_DIR}/dependencies.graphml
@@ -143,14 +116,13 @@ else()
${REACTOS_BINARY_DIR}/boot/ros_cab.txt
${REACTOS_BINARY_DIR}/boot/ros_cab_target.txt)
if(NOT NEW_STYLE_BUILD)
if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR)
set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build)
endif()
set(IMPORT_EXECUTABLES "${REACTOS_BUILD_TOOLS_DIR}/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
include(${IMPORT_EXECUTABLES})
if(NOT DEFINED REACTOS_BUILD_TOOLS_DIR)
set(REACTOS_BUILD_TOOLS_DIR ${REACTOS_SOURCE_DIR}/build)
endif()
set(IMPORT_EXECUTABLES "${REACTOS_BUILD_TOOLS_DIR}/ImportExecutables.cmake" CACHE FILEPATH "Host executables")
include(${IMPORT_EXECUTABLES})
if(DBG)
add_definitions(-DDBG=1 -D_SEH_ENABLE_TRACE)
else()
@@ -185,10 +157,7 @@ else()
add_definitions(-D_M_AMD64 -D_AMD64_ -D__x86_64__ -D_WIN64)
elseif(ARCH STREQUAL "arm")
# _M_ARM is already defined by toolchain
add_definitions(-D_ARM_ -D__arm__ -DWIN32)
if(SARCH STREQUAL "omap-zoom2")
add_definitions(-D_ZOOM2_)
endif()
add_definitions(-D_ARM_ -D__arm__)
endif()
# Other
@@ -197,7 +166,7 @@ else()
elseif(ARCH STREQUAL "amd64")
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
elseif(ARCH STREQUAL "arm")
add_definitions(-DUSE_COMPILER_EXCEPTIONS -DNO_UNDERSCORE_PREFIX)
add_definitions(-DUSE_COMPILER_EXCEPTIONS)
endif()
# Activate support for assembly source files
@@ -233,7 +202,6 @@ else()
${REACTOS_BINARY_DIR}/include
${REACTOS_BINARY_DIR}/include/psdk
${REACTOS_BINARY_DIR}/include/dxsdk
${REACTOS_BINARY_DIR}/include/ddk
${REACTOS_BINARY_DIR}/include/reactos
include/crt
include/ddk
@@ -247,7 +215,6 @@ else()
add_dependency_header()
add_subdirectory(include/xdk)
add_subdirectory(include/psdk)
add_subdirectory(include/dxsdk)
add_subdirectory(include/reactos/wine)
@@ -256,8 +223,6 @@ else()
if(NO_ROSSYM)
include(cmake/baseaddress_dwarf.cmake)
elseif(MSVC)
include(cmake/baseaddress_msvc.cmake)
else()
include(cmake/baseaddress.cmake)
endif()
@@ -279,9 +244,6 @@ else()
add_subdirectory(tools/wpp)
add_subdirectory(win32ss)
# Create the registry hives
create_registry_hives()
# Create {bootcd, livecd, bootcdregtest}.lst
create_iso_lists()

View File

@@ -13,7 +13,6 @@ Brian Palmer <brianp@sginet.com>
Cameron M. Gutman <cgutman@reactos.org>
Casper S. Hornstrup <chorns@users.sourceforge.net>
Christoph von Wittich <christoph_vw@reactos.org>
Colin Finck <colin@reactos.org>
Daniel Reimer <reimer.daniel@freenet.de>
David Welch <welch@cwcom.net>
Dmitry Chapyshev <dmitry@reactos.org>
@@ -68,7 +67,7 @@ Robert Dickenson <robd@reactos.org>
Royce Mitchell III <royce3@ev1.net>
Samuel Serapi<70>n <samdwise51@gmail.com>
Saveliy Tretiakov <saveliyt@mail.ru>
Stefan Ginsberg <stefan.ginsberg@reactos.org>
Stefan Ginsberg <stefan__100__@hotmail.com>
Steven Edwards <winehacker@gmail.com>
Thomas Weidenmueller <w3seek@users.sourceforge.net>
Timo Kreuzer <timo.kreuzer@reactos.org>

51
INSTALL
View File

@@ -1,41 +1,28 @@
1. Build environment
--------------------
To build the system it is strongly advised to use the ReactOS Build Environment
(RosBE). Up-to-date versions for Windows and for Unix/GNU-Linux are available
from our download page at: http://www.reactos.org/wiki/Build_Environment/
Alternatively one can use Microsoft Visual C++ (MSVC) version 2010+, together
with separate installations of CMake and the Ninja build utility.
To build the system you need either mingw32 installed on Windows or a mingw32
cross compiler running on unix. You may obtain MinGW binaries that build
ReactOS from http://www.reactos.org/.
2. Building ReactOS
-------------------
A throughout guide for how to build ReactOS can be found at:
http://www.reactos.org/wiki/Building_ReactOS
In the following we only make a quick overview.
2.1 Building the binaries
To build ReactOS run 'ninja' (without the quotes), or alternatively run
'make' if you are using the Make utility, from the top directory.
NOTE: In the other examples listed in the following, similar modification
holds if you are using the Make utility instead of Ninja.
If you are using RosBE, follow on-screen instructions.
To build ReactOS run 'make' (without the quotes) if you are building on Linux
or 'mingw32-make' if you are building on Windows (or ReactOS) from the top
directory. If you are using RosBE, follow on-screen instructions.
2.2 Building a bootable CD image
To build a bootable CD image run 'ninja bootcd' (without the quotes) from the
top directory. This will create a CD image with a filename, ReactOS.iso, in
the top directory.
To build a bootable CD image run 'make bootcd' (without the quotes) if you are
building on Linux or 'mingw32-make bootcd' if you are building on Windows (or
ReactOS) from the top directory. This will create a CD image with a filename,
ReactOS.iso, in the top directory.
3. Installation
---------------
ReactOS can only be installed on a machine that has a FAT16 or FAT32 partition
as the active (bootable) partition. The partition on which ReactOS is to be
@@ -54,13 +41,13 @@ build a bootable CD as described above. Burn the CD image, boot from it, and
follow the instructions to install ReactOS.
If you have an existing ReactOS installation you want to upgrade, then to
install ReactOS after building it, type 'ninja install'. This will create
the directory 'reactos' in the top directory. Copy the contents of this
directory over the existing installation.
install ReactOS after building it, type 'make install' or
'mingw32-make install'. This will create the directory 'reactos' in the top
directory. Copy the contents of this directory over the existing installation.
If you don't want to copy the files manually every time you run a
'ninja install', then you can specify the directory where the files are
to be copied to during installation.
'make install' or 'mingw32-make install', then you can specify the directory
where the files are to be copied to during installation.
Set the ROS_INSTALL environment variable. If you are on Windows this could be
done by:
@@ -71,7 +58,8 @@ If you are on Linux this could be done by:
export ROS_INSTALL=/mnt/windows/reactos
Now run 'ninja install' to install the files to the new location.
Now run 'make install' or 'mingw32-make install' to install the files to the
new location.
3.2 Installation from bootable CD distribution
@@ -80,13 +68,12 @@ To install ReactOS from the bootable CD distribution, extract the archive
contents. Then burn the CD image, boot from it, and follow instructions.
4. Help
-------
5. Help
If you run into problems or have suggestions for making ReactOS better, please
visit the address below. Mailing lists are available for a variety of topics,
bugs should be submitted to JIRA and general chat takes place in the forums,
or #reactos on freenode.
or #reactos on freenode
http://www.reactos.org/

23
README
View File

@@ -1,32 +1,29 @@
========================
ReactOS<EFBFBD> Version 0.4.x
Updated January 5, 2016
ReactOS Version 0.3.x
Updated Dec 16, 2006
========================
1. What is ReactOS?
-------------------
ReactOS<EFBFBD> is an Open Source effort to develop a quality operating system that is
compatible with applications and drivers written for the Microsoft<66> Windows<77> NT
family of operating systems (NT4, 2000, XP, 2003, Vista, Seven).
ReactOS is an Open Source effort to develop a quality operating system
that is compatible with Windows NT applications and drivers.
The ReactOS project, although currently focused on Windows Server 2003
compatibility, is always keeping an eye toward compatibility with
Windows Vista and future Windows NT releases.
The ReactOS project, although currently focused on Windows XP/2003
drivers compatibility, is always keeping an eye toward compatibility with
older version of Windows NT family ( NT 4.0, 2000 (NT 5.0)) and new
Windows NT releases (Vista, etc). Applications (Win32 API) compatibility
focus is Windows XP.
More information is available at: http://www.reactos.org
More information is available at http://www.reactos.org/.
2. Building ReactOS
-------------------
See the INSTALL file for more details.
3. More information
-------------------
See the media\doc subdirectory for some sparse notes.
4. Who is responsible
---------------------
See the CREDITS file.

View File

@@ -3,7 +3,6 @@ add_subdirectory(atactl)
add_subdirectory(cacls)
add_subdirectory(calc)
add_subdirectory(charmap)
add_subdirectory(clipbrd)
add_subdirectory(cmdutils)
add_subdirectory(control)
add_subdirectory(dxdiag)
@@ -19,7 +18,6 @@ add_subdirectory(magnify)
add_subdirectory(mmc)
add_subdirectory(mplay32)
add_subdirectory(msconfig)
add_subdirectory(msconfig_new)
add_subdirectory(mscutils)
add_subdirectory(mspaint)
add_subdirectory(mstsc)
@@ -27,7 +25,6 @@ add_subdirectory(network)
add_subdirectory(notepad)
add_subdirectory(osk)
add_subdirectory(rapps)
add_subdirectory(rapps_new)
add_subdirectory(regedit)
add_subdirectory(regedt32)
add_subdirectory(sc)

View File

@@ -75,9 +75,6 @@
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
#endif

View File

@@ -1,76 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_HELP "Kütüklerin erişim denetim dizelgelerini (ACL'lerini) görüntüler ya da değiştirir.\n\n\
CACLS kütük adı [/T] [/E] [/C] [/G kullanıcı:izin [...]] [/R kullanıcı [...]]\n\
[/P kullanıcı:izin [...]] [/D kullanıcı [...]]\n\
kütük adı ACL'leri görüntüler.\n\
/T Şimdiki dizin ve alt dizinlerin içinde\n\
belirtilen kütülerin ACL'lerini değiştirir.\n\
/E ACL'yi yenisiyle değiştirme yerine onu düzenle.\n\
/C Erişim engellendi yanlışlıklarıyla sürdür.\n\
/G kullanıcı:izin Belirtilen kullanıcı erişim yetkilerini ver.\n\
İzin şu olabilir: R Okuma\n\
W Yazma\n\
C Değiştirme (yazma)\n\
F Tüm denetim\n\
/R kullanıcı Belirtilen kullanıcının erişim yetkilerini geri al\n\
(yalnızca /E ile geçerli).\n\
/P kullanıcı:izin Belirtilen kullanıcının erişim yetkilerini yenileriyle\n\
değiştir.\n\
İzin şu olabilir: N Yok\n\
R Okuma\n\
W Yazma\n\
C Değiştirme (yazma)\n\
F Tüm denetim\n\
/D kullanıcı Belirtilen kullanıcı erişimini verme.\n\
Umûmî arama damgaları, bir komutta birden çok kütük belirtmek için kullanılabilir.\n\
Bir komutta birden çok kullanıcı belirtebilirsiniz.\n\n\
Kısaltmalar:\n\
CI - Kapsayıcı Devral.\n\
ACE dizinlerle devralınacak.\n\
OI - Nesne Devral.\n\
ACE kütüklerle devralınacak.\n\
IO - Yalnızca Devral.\n\
ACE'yi şimdiki kütüğe ya da dizine uygulama.\n"
IDS_ABBR_CI "(CI)"
IDS_ABBR_OI "(OI)"
IDS_ABBR_IO "(IO)"
IDS_ABBR_FULL "F"
IDS_ABBR_READ "R"
IDS_ABBR_WRITE "W"
IDS_ABBR_CHANGE "C"
IDS_ABBR_NONE "N"
IDS_ALLOW ""
IDS_DENY "(VERME)"
IDS_SPECIAL_ACCESS "(husûsî erişim:)"
IDS_GENERIC_READ "GENERIC_READ"
IDS_GENERIC_WRITE "GENERIC_WRITE"
IDS_GENERIC_EXECUTE "GENERIC_EXECUTE"
IDS_GENERIC_ALL "GENERIC_ALL"
IDS_FILE_GENERIC_EXECUTE "FILE_GENERIC_EXECUTE"
IDS_FILE_GENERIC_READ "FILE_GENERIC_READ"
IDS_FILE_GENERIC_WRITE "FILE_GENERIC_WRITE"
IDS_FILE_READ_DATA "FILE_READ_DATA"
IDS_FILE_WRITE_DATA "FILE_WRITE_DATA"
IDS_FILE_APPEND_DATA "FILE_APPEND_DATA"
IDS_FILE_READ_EA "FILE_READ_EA"
IDS_FILE_WRITE_EA "FILE_WRITE_EA"
IDS_FILE_EXECUTE "FILE_EXECUTE"
IDS_FILE_DELETE_CHILD "FILE_DELETE_CHILD"
IDS_FILE_READ_ATTRIBUTES "FILE_READ_ATTRIBUTES"
IDS_FILE_WRITE_ATTRIBUTES "FILE_WRITE_ATTRIBUTES"
IDS_MAXIMUM_ALLOWED "MAXIMUM_ALLOWED"
IDS_ACCESS_SYSTEM_SECURITY "ACCESS_SYSTEM_SECURITY"
IDS_SPECIFIC_RIGHTS_ALL "SPECIFIC_RIGHTS_ALL"
IDS_STANDARD_RIGHTS_REQUIRED "STANDARD_RIGHTS_REQUIRED"
IDS_SYNCHRONIZE "SYNCHRONIZE"
IDS_WRITE_OWNER "WRITE_OWNER"
IDS_WRITE_DAC "WRITE_DAC"
IDS_READ_CONTROL "READ_CONTROL"
IDS_DELETE "DELETE"
IDS_STANDARD_RIGHTS_ALL "STANDARD_RIGHTS_ALL"
END

View File

@@ -10,8 +10,6 @@ list(APPEND SOURCE
winmain.c
calc.h)
file(GLOB calc_rc_deps res/*.*)
add_rc_deps(resource.rc ${calc_rc_deps})
add_executable(calc ${SOURCE} resource.rc)
set_module_type(calc win32gui UNICODE)
add_importlibs(calc advapi32 user32 gdi32 msvcrt kernel32)

View File

@@ -323,89 +323,89 @@ END
IDR_MENU_SCIENTIFIC_1 MENU
BEGIN
POPUP "&Edit"
POPUP "Edit"
BEGIN
MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "Paste\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&View"
POPUP "View"
BEGIN
MENUITEM "S&tandard", IDM_VIEW_STANDARD
MENUITEM "&Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "C&onversion", IDM_VIEW_CONVERSION
MENUITEM "Standard", IDM_VIEW_STANDARD
MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "Conversion", IDM_VIEW_CONVERSION
MENUITEM SEPARATOR
MENUITEM "&Hex\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "&Decimal\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Octal\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "&Binary\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM "Hex\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "Decimal\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "Octal\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "Binary\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM SEPARATOR
MENUITEM "D&egrees\tF2", IDM_VIEW_DEG, CHECKED
MENUITEM "&Radians\tF3", IDM_VIEW_RAD, CHECKED
MENUITEM "&Gradians\tF4", IDM_VIEW_GRAD, CHECKED
MENUITEM "Degrees\tF2", IDM_VIEW_DEG, CHECKED
MENUITEM "Radians\tF3", IDM_VIEW_RAD, CHECKED
MENUITEM "Gradians\tF4", IDM_VIEW_GRAD, CHECKED
MENUITEM SEPARATOR
MENUITEM "Group d&igits", IDM_VIEW_GROUP, CHECKED
MENUITEM "Group digits", IDM_VIEW_GROUP, CHECKED
END
POPUP "&Help"
POPUP "Help"
BEGIN
MENUITEM "&Help topics", IDM_HELP_HELP
MENUITEM "Help topics", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&About ReactOS Calc", IDM_HELP_ABOUT
MENUITEM "About ReactOS Calc", IDM_HELP_ABOUT
END
END
IDR_MENU_SCIENTIFIC_2 MENU
BEGIN
POPUP "&Edit"
POPUP "Edit"
BEGIN
MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "Paste\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&View"
POPUP "View"
BEGIN
MENUITEM "S&tandard", IDM_VIEW_STANDARD
MENUITEM "&Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "C&onversion", IDM_VIEW_CONVERSION
MENUITEM "Standard", IDM_VIEW_STANDARD
MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "Conversion", IDM_VIEW_CONVERSION
MENUITEM SEPARATOR
MENUITEM "&Hex\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "&Decimal\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Octal\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "&Binary\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM "Hex\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "Decimal\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "Octal\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "Binary\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM SEPARATOR
MENUITEM "&Qword\tF12", IDM_VIEW_QWORD, CHECKED
MENUITEM "&Dword\tF2", IDM_VIEW_DWORD, CHECKED
MENUITEM "&Word\tF3", IDM_VIEW_WORD, CHECKED
MENUITEM "B&yte\tF4", IDM_VIEW_BYTE, CHECKED
MENUITEM "Qword\tF12", IDM_VIEW_QWORD, CHECKED
MENUITEM "Dword\tF2", IDM_VIEW_DWORD, CHECKED
MENUITEM "Word\tF3", IDM_VIEW_WORD, CHECKED
MENUITEM "Byte\tF4", IDM_VIEW_BYTE, CHECKED
MENUITEM SEPARATOR
MENUITEM "Group d&igits", IDM_VIEW_GROUP, CHECKED
MENUITEM "Group digits", IDM_VIEW_GROUP, CHECKED
END
POPUP "&Help"
POPUP "Help"
BEGIN
MENUITEM "&Help topics", IDM_HELP_HELP
MENUITEM "Help topics", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&About ReactOS Calc", IDM_HELP_ABOUT
MENUITEM "About ReactOS Calc", IDM_HELP_ABOUT
END
END
IDR_MENU_STANDARD MENU
BEGIN
POPUP "&Edit"
POPUP "Edit"
BEGIN
MENUITEM "&Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "Paste\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&View"
POPUP "View"
BEGIN
MENUITEM "S&tandard", IDM_VIEW_STANDARD
MENUITEM "&Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "C&onversion", IDM_VIEW_CONVERSION
MENUITEM "Standard", IDM_VIEW_STANDARD
MENUITEM "Scientific", IDM_VIEW_SCIENTIFIC
MENUITEM "Conversion", IDM_VIEW_CONVERSION
MENUITEM SEPARATOR
MENUITEM "Group d&igits", IDM_VIEW_GROUP, CHECKED
MENUITEM "Group digits", IDM_VIEW_GROUP, CHECKED
END
POPUP "&Help"
POPUP "Help"
BEGIN
MENUITEM "&Help topics", IDM_HELP_HELP
MENUITEM "Help topics", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&About ReactOS Calc", IDM_HELP_ABOUT
MENUITEM "About ReactOS Calc", IDM_HELP_ABOUT
END
END

View File

@@ -8,7 +8,7 @@ IDD_DIALOG_SCIENTIFIC DIALOGEX 0, 0, 316, 163
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 계산기"
MENU IDR_MENU_SCIENTIFIC_1
FONT 9, "MS Shell Dlg", 0, 0, 0x1
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "", IDC_STATIC, 5 ,14, 141, 20
CONTROL "Hex", IDC_RADIO_HEX, "Button", BS_AUTORADIOBUTTON, 8, 21, 30, 10
@@ -156,7 +156,7 @@ IDD_DIALOG_STANDARD DIALOGEX 0, 0, 169, 128
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 계산기"
MENU IDR_MENU_STANDARD
FONT 9, "MS Shell Dlg", 0, 0, 0x1
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
PUSHBUTTON "C", IDC_BUTTON_CANC, 123, 23, 41, 18, BS_CENTER | BS_VCENTER |
BS_NOTIFY | BS_OWNERDRAW | WS_TABSTOP
@@ -221,7 +221,7 @@ IDD_DIALOG_CONVERSION DIALOGEX 0, 0, 320, 130
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 계산기 정보"
MENU IDR_MENU_STANDARD
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "Convert", IDC_BUTTON_CONVERT, 35, 105, 76, 17
COMBOBOX IDC_COMBO_CATEGORY, 5, 31, 140, 168, CBS_DROPDOWNLIST | WS_VSCROLL |
@@ -295,7 +295,7 @@ END
IDD_DIALOG_ABOUT DIALOGEX 0, 0, 264, 169
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 계산기 정보"
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK", IDOK, 105, 148, 52, 16
CONTROL IDB_BITMAP_ROS, IDC_STATIC, "Static", SS_BITMAP | SS_CENTERIMAGE |
@@ -311,7 +311,7 @@ END
IDD_DIALOG_STAT DIALOGEX 0, 0, 163, 85
STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Statistics box"
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
LISTBOX IDC_LIST_STAT, 4, 4, 156, 40, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "RET", IDC_BUTTON_RET, 4, 48, 36, 16

View File

@@ -1,7 +1,7 @@
/*
* Translators: Petru Dimitriu (petrimetri at gmail dot com)
* Ștefan Fulea (stefan dot fulea at mail dot md)
*/
Translators: Petru Dumitriu (petrimetri at gmail dot com)
Ștefan Fulea (stefan dot fulea at mail dot md)
*/
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL

View File

@@ -536,7 +536,7 @@ END
STRINGTABLE
BEGIN
IDS_LENGTH_ANGSTROMS "ангстрем"
IDS_LENGTH_ASTRONOMICAL_UNITS "астрономическая единица"
IDS_LENGTH_ASTRONOMICAL_UNITS "астрономическая еденица"
IDS_LENGTH_BARLEYCORNS "барлейкорн"
IDS_LENGTH_CENTIMETERS "сантиметр"
IDS_LENGTH_CHAINS_UK "чейн (британский)"
@@ -621,7 +621,7 @@ STRINGTABLE
BEGIN
IDS_TIME_DAYS "день"
IDS_TIME_HOURS "час"
IDS_TIME_NANOSECONDS "наносекунда"
IDS_TIME_NANOSECONDS "Nanoseconds"
IDS_TIME_MICROSECONDS "микросекунда"
IDS_TIME_MILLISECONDS "миллисекунда"
IDS_TIME_MINUTES "минута"

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: ReactOS CALC
* FILE: base/applications/calc/lang/sv-SE.rc
* FILE: base\applications\calc\lang\sv-SE.rc
* PURPOSE: Swedish resource file
* Translation: Jaix Bly
*/

View File

@@ -1,4 +1,4 @@
/* TRANSLATOR: 2013, 2014, 2016 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
/* TRANSLATOR: 2013, 2014 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
@@ -327,8 +327,8 @@ IDR_MENU_SCIENTIFIC_1 MENU
BEGIN
POPUP "&Düzen"
BEGIN
MENUITEM "&Çoğalt\tDenetim+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tDenetim+V", IDM_EDIT_PASTE
MENUITEM "&Çoğalt\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&Görünüm"
BEGIN
@@ -336,14 +336,14 @@ BEGIN
MENUITEM "&Bilimlik", IDM_VIEW_SCIENTIFIC
MENUITEM "&Dönüştürme", IDM_VIEW_CONVERSION
MENUITEM SEPARATOR
MENUITEM "&Onaltılık\tİ5", IDM_VIEW_HEX, CHECKED
MENUITEM "O&nluk\tİ6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Sekizlik\tİ7", IDM_VIEW_OCT, CHECKED
MENUITEM "&İkilik\tİ8", IDM_VIEW_BIN, CHECKED
MENUITEM "&Onaltılık\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "O&nluk\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Sekizlik\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "&İkilik\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM SEPARATOR
MENUITEM "D&erece\tİ2", IDM_VIEW_DEG, CHECKED
MENUITEM "&Radyan\tİ3", IDM_VIEW_RAD, CHECKED
MENUITEM "&Gradyan\tİ4", IDM_VIEW_GRAD, CHECKED
MENUITEM "D&erece\tF2", IDM_VIEW_DEG, CHECKED
MENUITEM "&Radyan\tF3", IDM_VIEW_RAD, CHECKED
MENUITEM "&Gradyan\tF4", IDM_VIEW_GRAD, CHECKED
MENUITEM SEPARATOR
MENUITEM "B&asamakları Takımla", IDM_VIEW_GROUP, CHECKED
END
@@ -351,7 +351,7 @@ BEGIN
BEGIN
MENUITEM "&Yardım Konuları", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&ReactOS Hesap Makinesi Üzerine...", IDM_HELP_ABOUT
MENUITEM "&Üzerine...", IDM_HELP_ABOUT
END
END
@@ -359,8 +359,8 @@ IDR_MENU_SCIENTIFIC_2 MENU
BEGIN
POPUP "&Düzen"
BEGIN
MENUITEM "&Çoğalt\tDenetim+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tDenetim+V", IDM_EDIT_PASTE
MENUITEM "&Çoğalt\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&Görünüm"
BEGIN
@@ -368,15 +368,15 @@ BEGIN
MENUITEM "&Bilimlik", IDM_VIEW_SCIENTIFIC
MENUITEM "&Dönüştürme", IDM_VIEW_CONVERSION
MENUITEM SEPARATOR
MENUITEM "&Onaltılık\tİ5", IDM_VIEW_HEX, CHECKED
MENUITEM "O&nluk\tİ6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Sekizlik\tİ7", IDM_VIEW_OCT, CHECKED
MENUITEM "&İkilik\tİ8", IDM_VIEW_BIN, CHECKED
MENUITEM "&Onaltılık\tF5", IDM_VIEW_HEX, CHECKED
MENUITEM "O&nluk\tF6", IDM_VIEW_DEC, CHECKED
MENUITEM "&Sekizlik\tF7", IDM_VIEW_OCT, CHECKED
MENUITEM "&İkilik\tF8", IDM_VIEW_BIN, CHECKED
MENUITEM SEPARATOR
MENUITEM "Dö&rtlü Sözcük\tİ12", IDM_VIEW_QWORD, CHECKED
MENUITEM "İ&kili Sözcük\tİ2", IDM_VIEW_DWORD, CHECKED
MENUITEM "Sö&zcük\tİ3", IDM_VIEW_WORD, CHECKED
MENUITEM "&Çoklu\tİ4", IDM_VIEW_BYTE, CHECKED
MENUITEM "Dö&rtlü Sözcük\tF12", IDM_VIEW_QWORD, CHECKED
MENUITEM "İ&kili Sözcük\tF2", IDM_VIEW_DWORD, CHECKED
MENUITEM "Sö&zcük\tF3", IDM_VIEW_WORD, CHECKED
MENUITEM "&Çoklu\tF4", IDM_VIEW_BYTE, CHECKED
MENUITEM SEPARATOR
MENUITEM "B&asamakları Takımla", IDM_VIEW_GROUP, CHECKED
END
@@ -384,7 +384,7 @@ BEGIN
BEGIN
MENUITEM "&Yardım Konuları", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&ReactOS Hesap Makinesi Üzerine...", IDM_HELP_ABOUT
MENUITEM "&Üzerine...", IDM_HELP_ABOUT
END
END
@@ -392,8 +392,8 @@ IDR_MENU_STANDARD MENU
BEGIN
POPUP "&Düzen"
BEGIN
MENUITEM "&Çoğalt\tDenetim+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tDenetim+V", IDM_EDIT_PASTE
MENUITEM "&Çoğalt\tCtrl+C", IDM_EDIT_COPY
MENUITEM "&Yapıştır\tCtrl+V", IDM_EDIT_PASTE
END
POPUP "&Görünüm"
BEGIN
@@ -407,7 +407,7 @@ BEGIN
BEGIN
MENUITEM "&Yardım Konuları", IDM_HELP_HELP
MENUITEM SEPARATOR
MENUITEM "&ReactOS Hesap Makinesi Üzerine...", IDM_HELP_ABOUT
MENUITEM "&Üzerine...", IDM_HELP_ABOUT
END
END

View File

@@ -8,7 +8,7 @@ IDD_DIALOG_SCIENTIFIC DIALOGEX 0, 0, 316, 163
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 计算器"
MENU IDR_MENU_SCIENTIFIC_1
FONT 9, "MS Shell Dlg", 0, 0, 0x1
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX "", IDC_STATIC, 5 ,14, 141, 20
CONTROL "Hex", IDC_RADIO_HEX, "Button", BS_AUTORADIOBUTTON, 8, 21, 30, 10
@@ -156,7 +156,7 @@ IDD_DIALOG_STANDARD DIALOGEX 0, 0, 169, 128
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 计算器"
MENU IDR_MENU_STANDARD
FONT 9, "MS Shell Dlg", 0, 0, 0x1
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
PUSHBUTTON "C", IDC_BUTTON_CANC, 123, 23, 41, 18, BS_CENTER | BS_VCENTER |
BS_NOTIFY | BS_OWNERDRAW | WS_TABSTOP
@@ -221,7 +221,7 @@ IDD_DIALOG_CONVERSION DIALOGEX 0, 0, 320, 130
STYLE DS_SHELLFONT | WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "ReactOS 计算器"
MENU IDR_MENU_STANDARD
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
PUSHBUTTON "转换", IDC_BUTTON_CONVERT, 35, 105, 76, 17
COMBOBOX IDC_COMBO_CATEGORY, 5, 31, 140, 168, CBS_DROPDOWNLIST | WS_VSCROLL |
@@ -295,7 +295,7 @@ END
IDD_DIALOG_ABOUT DIALOGEX 0, 0, 264, 169
STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "关于 ReactOS 计算器"
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "确定", IDOK, 105, 148, 52, 16
CONTROL IDB_BITMAP_ROS, IDC_STATIC, "Static", SS_BITMAP | SS_CENTERIMAGE |
@@ -311,7 +311,7 @@ END
IDD_DIALOG_STAT DIALOGEX 0, 0, 163, 85
STYLE DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "统计框"
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
LISTBOX IDC_LIST_STAT, 4, 4, 156, 40, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "返回", IDC_BUTTON_RET, 4, 48, 36, 16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS Calc
* LICENSE: LGPL - See COPYING.LIB in the top level directory
* FILE: base/applications/calc/resource.rc
* FILE: base/applications/calcs/resource.rc
* PURPOSE: Global resource file
*/
@@ -14,6 +14,10 @@
#define IDC_STATIC -1
#endif
#ifndef DS_SHELLFONT
#define DS_SHELLFONT DS_SETFONT|DS_FIXEDSYS
#endif
/* Common resources */
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

View File

@@ -1346,49 +1346,40 @@ static INT_PTR CALLBACK DlgMainProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
#endif
return TRUE;
case IDM_VIEW_STANDARD:
if (calc.layout != CALC_LAYOUT_STANDARD)
{
calc.layout = CALC_LAYOUT_STANDARD;
calc.action = IDM_VIEW_STANDARD;
DestroyWindow(hWnd);
save_config();
calc.layout = CALC_LAYOUT_STANDARD;
calc.action = IDM_VIEW_STANDARD;
DestroyWindow(hWnd);
save_config();
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_STANDARD,
MF_BYCOMMAND);
}
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_STANDARD,
MF_BYCOMMAND);
return TRUE;
case IDM_VIEW_SCIENTIFIC:
if (calc.layout != CALC_LAYOUT_SCIENTIFIC)
{
calc.layout = CALC_LAYOUT_SCIENTIFIC;
calc.action = IDM_VIEW_SCIENTIFIC;
DestroyWindow(hWnd);
save_config();
calc.layout = CALC_LAYOUT_SCIENTIFIC;
calc.action = IDM_VIEW_SCIENTIFIC;
DestroyWindow(hWnd);
save_config();
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_SCIENTIFIC,
MF_BYCOMMAND);
}
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_SCIENTIFIC,
MF_BYCOMMAND);
return TRUE;
case IDM_VIEW_CONVERSION:
if (calc.layout != CALC_LAYOUT_CONVERSION)
{
calc.layout = CALC_LAYOUT_CONVERSION;
calc.action = IDM_VIEW_CONVERSION;
DestroyWindow(hWnd);
save_config();
calc.layout = CALC_LAYOUT_CONVERSION;
calc.action = IDM_VIEW_CONVERSION;
DestroyWindow(hWnd);
save_config();
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_CONVERSION,
MF_BYCOMMAND);
}
CheckMenuRadioItem(GetMenu(hWnd),
IDM_VIEW_STANDARD,
IDM_VIEW_CONVERSION,
IDM_VIEW_CONVERSION,
MF_BYCOMMAND);
return TRUE;
case IDM_VIEW_HEX:
case IDM_VIEW_DEC:

View File

@@ -7,7 +7,6 @@ list(APPEND SOURCE
settings.c
precomp.h)
add_rc_deps(charmap.rc ${CMAKE_CURRENT_SOURCE_DIR}/res/charmap.ico)
add_executable(charmap ${SOURCE} charmap.rc)
set_module_type(charmap win32gui UNICODE)
add_importlibs(charmap advapi32 user32 gdi32 comctl32 msvcrt kernel32)

View File

@@ -12,8 +12,6 @@
#include <commctrl.h>
#include <richedit.h>
#define REMOVE_ADVANCED
#define ID_ABOUT 0x1
HINSTANCE hInstance;
@@ -239,7 +237,7 @@ AddCharToSelection(HWND hDlg, WCHAR ch)
SendMessage(hText, WM_CHAR, (WPARAM)ch, 0);
}
#ifndef REMOVE_ADVANCED
static
void
UpdateSettings(HWND hDlg)
@@ -247,24 +245,20 @@ UpdateSettings(HWND hDlg)
if (hDlg == hCharmapDlg)
{
Settings.IsAdvancedView =
SendDlgItemMessage(hDlg, IDC_CHECK_ADVANCED, BM_GETCHECK, 0, 0);
SendDlgItemMessage(hDlg, IDC_CHECK_ADVANCED, BM_GETCHECK, 0, 0);
}
if (hDlg == hAdvancedDlg)
{
}
}
#endif
static
void
ChangeView(HWND hWnd)
{
RECT rcCharmap;
#ifndef REMOVE_ADVANCED
RECT rcAdvanced;
#endif
RECT rcPanelExt;
RECT rcPanelInt;
RECT rcStatus;
@@ -274,9 +268,7 @@ ChangeView(HWND hWnd)
UINT DeskTopWidth, DeskTopHeight;
GetClientRect(hCharmapDlg, &rcCharmap);
#ifndef REMOVE_ADVANCED
GetClientRect(hAdvancedDlg, &rcAdvanced);
#endif
GetWindowRect(hWnd, &rcPanelExt);
GetClientRect(hWnd, &rcPanelInt);
GetClientRect(hStatusWnd, &rcStatus);
@@ -288,19 +280,19 @@ ChangeView(HWND hWnd)
DeY = (rcPanelExt.bottom - rcPanelExt.top) - rcPanelInt.bottom;
MoveWindow(hCharmapDlg, 0, 0, rcCharmap.right, rcCharmap.bottom, FALSE);
#ifndef REMOVE_ADVANCED
MoveWindow(hAdvancedDlg, 0, rcCharmap.bottom, rcAdvanced.right, rcAdvanced.bottom, FALSE);
ShowWindow(hAdvancedDlg, (Settings.IsAdvancedView) ? SW_SHOW : SW_HIDE);
#endif
xPos = rcPanelExt.left;
yPos = rcPanelExt.top;
Width = DeX + rcCharmap.right;
Height = DeY + rcCharmap.bottom + rcStatus.bottom;
#ifndef REMOVE_ADVANCED
if (Settings.IsAdvancedView)
Height += rcAdvanced.bottom;
#endif
if ((xPos + Width) > DeskTopWidth)
xPos += DeskTopWidth - (xPos + Width);
@@ -326,9 +318,6 @@ CharMapDlgProc(HWND hDlg,
case WM_INITDIALOG:
{
DWORD evMask;
#ifdef REMOVE_ADVANCED
HWND hAdv;
#endif
FillFontStyleComboList(GetDlgItem(hDlg,
IDC_FONTCOMBO));
@@ -339,10 +328,7 @@ CharMapDlgProc(HWND hDlg,
evMask = SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_GETEVENTMASK, 0, 0);
evMask |= ENM_CHANGE;
SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_SETEVENTMASK, 0, (LPARAM)evMask);
#ifdef REMOVE_ADVANCED
hAdv = GetDlgItem(hDlg, IDC_CHECK_ADVANCED);
ShowWindow(hAdv, SW_HIDE);
#endif
return TRUE;
}
@@ -384,12 +370,11 @@ CharMapDlgProc(HWND hDlg,
case IDC_COPY:
CopyCharacters(hDlg);
break;
#ifndef REMOVE_ADVANCED
case IDC_CHECK_ADVANCED:
UpdateSettings(hDlg);
ChangeView(GetParent(hDlg));
break;
#endif
}
}
break;
@@ -400,7 +385,7 @@ CharMapDlgProc(HWND hDlg,
return FALSE;
}
#ifndef REMOVE_ADVANCED
static
INT_PTR
CALLBACK
@@ -420,7 +405,7 @@ AdvancedDlgProc(HWND hDlg,
return FALSE;
}
#endif
static int
OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
@@ -431,12 +416,12 @@ OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
MAKEINTRESOURCE(IDD_CHARMAP),
hWnd,
CharMapDlgProc);
#ifndef REMOVE_ADVANCED
hAdvancedDlg = CreateDialog(hInstance,
MAKEINTRESOURCE(IDD_ADVANCED),
hWnd,
AdvancedDlgProc);
#endif
MAKEINTRESOURCE(IDD_ADVANCED),
hWnd,
AdvancedDlgProc);
hStatusWnd = CreateWindow(STATUSCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE,

View File

@@ -4,18 +4,18 @@ IDD_CHARMAP DIALOGEX 6, 6, 292, 224
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE
BEGIN
LTEXT "&Font:", IDC_STATIC, 6, 7, 24, 9
LTEXT "Font:", IDC_STATIC, 6, 7, 24, 9
COMBOBOX IDC_FONTCOMBO, 36, 5, 210, 210, WS_CHILD | WS_VISIBLE |
WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS
PUSHBUTTON "&Help", IDC_CMHELP, 249, 5, 35, 13
PUSHBUTTON "Help", IDC_CMHELP, 249, 5, 35, 13
CONTROL "", IDC_FONTMAP, "FontMapWnd", WS_CHILD | WS_VISIBLE | WS_TABSTOP |
WS_VSCROLL, 20, 22, 266, 156
LTEXT "Ch&aracters to copy:", IDC_STATIC, 6, 188, 66, 9
LTEXT "Characters to copy:", IDC_STATIC, 6, 188, 66, 9
CONTROL "", IDC_TEXTBOX, RICHEDIT_CLASS, ES_AUTOHSCROLL | WS_BORDER |
WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13
DEFPUSHBUTTON "&Select", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "&Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
CONTROL "Ad&vanced view", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
DEFPUSHBUTTON "Select", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
CONTROL "Advanced view", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
WS_TABSTOP, 8, 208, 95, 10
END
@@ -23,14 +23,14 @@ IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Charse&t:", IDC_STATIC, 8, 8, 48, 8
LTEXT "Charset:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Group by:", IDC_STATIC, 8, 28, 50, 8
LTEXT "Group by:", IDC_STATIC, 8, 28, 50, 8
COMBOBOX IDC_COMBO_GROUPBY, 72, 24, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Sea&rch", IDC_BUTTON_SEARCH, 200, 44, 50, 14
PUSHBUTTON "Search", IDC_BUTTON_SEARCH, 200, 44, 50, 14
EDITTEXT IDC_EDIT_SEARCH, 72, 44, 116, 14, ES_AUTOHSCROLL
LTEXT "S&earch for:", IDC_STATIC, 8, 48, 42, 8
LTEXT "&Unicode:", IDC_STATIC, 200, 8, 30, 8
LTEXT "Search for:", IDC_STATIC, 8, 48, 42, 8
LTEXT "Unicode:", IDC_STATIC, 200, 8, 30, 8
EDITTEXT IDC_EDIT_UNICODE, 236, 4, 28, 12, ES_AUTOHSCROLL
END
@@ -40,7 +40,7 @@ FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "Character Map v0.1\nCopyright (C) 2007 Ged Murphy (gedmurphy@reactos.org)", IDC_STATIC, 48, 7, 150, 36
PUSHBUTTON "&Close", IDOK, 75, 162, 44, 15
PUSHBUTTON "Close", IDOK, 75, 162, 44, 15
ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30
EDITTEXT IDC_LICENSE_EDIT, 8, 44, 194, 107, WS_VISIBLE | WS_VSCROLL |
WS_TABSTOP | ES_READONLY | ES_MULTILINE

View File

@@ -21,7 +21,7 @@ END
IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 9, "MS UI Gothic"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Charset:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP

View File

@@ -5,7 +5,7 @@
LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT
IDD_CHARMAP DIALOGEX 6, 6, 292, 224
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE
BEGIN
LTEXT "글꼴:", IDC_STATIC, 6, 7, 24, 9
@@ -25,7 +25,7 @@ END
IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Charset:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
@@ -40,7 +40,7 @@ END
IDD_ABOUTBOX DIALOGEX 22, 16, 210, 182
CAPTION "문자표에 대하여"
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "Character Map v0.1\nCopyright (C) 2007 Ged Murphy (gedmurphy@reactos.org)", IDC_STATIC, 48, 7, 150, 36

View File

@@ -19,7 +19,7 @@ BEGIN
LTEXT "C&aractere de copiat:", IDC_STATIC, 6, 188, 66, 9
CONTROL "", IDC_TEXTBOX, RICHEDIT_CLASS, ES_AUTOHSCROLL | WS_BORDER |
WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13
DEFPUSHBUTTON "S&electează", IDC_SELECT, 194, 186, 44, 13
DEFPUSHBUTTON "&Selectează", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "&Copiază", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
CONTROL "Mod a&vansat", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
WS_TABSTOP, 8, 208, 95, 10
@@ -33,7 +33,7 @@ BEGIN
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Grupare după:", IDC_STATIC, 8, 28, 50, 8
COMBOBOX IDC_COMBO_GROUPBY, 72, 24, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Caută", IDC_BUTTON_SEARCH, 200, 44, 50, 14
PUSHBUTTON "Cau&tă", IDC_BUTTON_SEARCH, 200, 44, 50, 14
EDITTEXT IDC_EDIT_SEARCH, 72, 44, 116, 14, ES_AUTOHSCROLL
LTEXT "Căuta&re:", IDC_STATIC, 8, 48, 42, 8
LTEXT "&Unicode:", IDC_STATIC, 200, 8, 30, 8
@@ -45,7 +45,7 @@ CAPTION "Despre"
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "Hartă de caractere v0.1\nDrept de autor (C) 2007 Ged Murphy (gedmurphy@reactos.org)\nTraducere de Ștefan Fulea (stefan.fulea@mail.md)", IDC_STATIC, 48, 7, 210, 36
LTEXT "Hartă a caracterelor v0.1\nDrept de autor (C) 2007 Ged Murphy (gedmurphy@reactos.org)\nTraducere de Ștefan Fulea (stefan.fulea@mail.md)", IDC_STATIC, 48, 7, 210, 36
PUSHBUTTON "Î&nchide", IDOK, 105, 162, 44, 15
ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30
EDITTEXT IDC_LICENSE_EDIT, 8, 44, 254, 107, WS_VISIBLE | WS_VSCROLL |
@@ -56,5 +56,5 @@ STRINGTABLE
BEGIN
IDS_LICENSE "Această aplicație este publică; fiind permisă modificarea și/sau (re)distribuția sa în termenii Licenței Publice Generale GNU publicată de Free Software Foundation; sau versiunea 2 a Licenței, sau (la alegere) a oricărei versiuni ulterioare.\r\n\r\nAceastă aplicație este distribuită doar în speranța de a fi utilă, FĂRĂ însă NICI O GARANȚIE; nici măcar cu garanția implicită a VANDABILITĂȚII sau a UTILITĂȚII ÎNTR-UN SCOP ANUME. Pentru mai multe detalii consultați Licența Publică Generală GNU.\r\n\r\nPuteți vedea această licență aici:\r\nhttp://www.gnu.org/licenses/gpl.html\r\n\r\nDe asemenea puteți consulta traduceri neoficiale ale acestei licențe aici:\r\nhttp://www.gnu.org/licenses/translations.html"
IDS_ABOUT "&Despre…"
IDS_TITLE "Hartă de caractere"
IDS_TITLE "Hartă a caracterelor"
END

View File

@@ -18,7 +18,7 @@ BEGIN
DEFPUSHBUTTON "Выбрать", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "Копировать", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
CONTROL "Дополнительные параметры", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
WS_TABSTOP, 8, 208, 110, 10
WS_TABSTOP, 8, 208, 95, 10
END
IDD_ADVANCED DIALOGEX 0, 0, 292, 64

View File

@@ -9,7 +9,7 @@
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
IDD_CHARMAP DIALOGEX 6, 6, 292, 224
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE
BEGIN
LTEXT "字体:", IDC_STATIC, 6, 7, 24, 9
@@ -29,7 +29,7 @@ END
IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "字符集:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
@@ -44,7 +44,7 @@ END
IDD_ABOUTBOX DIALOGEX 22, 16, 210, 182
CAPTION "关于字符映射表"
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "字符映射表 v0.1\nCopyright (C) 2007 Ged Murphy (gedmurphy@reactos.org)", IDC_STATIC, 48, 7, 150, 36

View File

@@ -9,7 +9,7 @@
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
IDD_CHARMAP DIALOGEX 6, 6, 292, 224
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE
BEGIN
LTEXT "字體:", IDC_STATIC, 6, 7, 24, 9
@@ -29,7 +29,7 @@ END
IDD_ADVANCED DIALOGEX 0, 0, 292, 64
STYLE DS_SHELLFONT | WS_CHILD
FONT 9, "MS Shell Dlg"
FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "字元集:", IDC_STATIC, 8, 8, 48, 8
COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
@@ -44,7 +44,7 @@ END
IDD_ABOUTBOX DIALOGEX 22, 16, 210, 182
CAPTION "關於字元對應表"
FONT 9, "MS Shell Dlg", 0, 0
FONT 8, "MS Shell Dlg", 0, 0
STYLE DS_SHELLFONT | WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME
BEGIN
LTEXT "字元對應表 v0.1\nCopyright (C) 2007 Ged Murphy (gedmurphy@reactos.org)", IDC_STATIC, 48, 7, 150, 36

View File

@@ -16,6 +16,14 @@ static const WCHAR szLrgCellWndClass[] = L"LrgCellWnd";
#define MAX_ROWS (0xFFFF / XCELLS) + 1 - YCELLS
static
VOID
TagFontToCell(PCELL pCell,
WCHAR ch)
{
pCell->ch = ch;
}
static
VOID
@@ -99,47 +107,33 @@ FillGrid(PMAP infoPtr,
INT x, y;
RECT rc;
PCELL Cell;
INT i, added;
hOldFont = SelectObject(ps->hdc,
infoPtr->hFont);
i = XCELLS * infoPtr->iYStart;
added = 0;
x = y = 0;
while ((y <= YCELLS) && (x <= XCELLS))
for (y = 0; y < YCELLS; y++)
for (x = 0; x < XCELLS; x++)
{
ch = (WCHAR)infoPtr->ValidGlyphs[i];
Cell = &infoPtr->Cells[y][x];
if (IntersectRect(&rc,
&ps->rcPaint,
&Cell->CellExt))
if (!IntersectRect(&rc,
&ps->rcPaint,
&Cell->CellExt))
{
Cell->ch = ch;
DrawTextW(ps->hdc,
&ch,
1,
&Cell->CellInt,
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
added++;
continue;
}
i++;
ch = (WCHAR)i;
ch = (WCHAR)((XCELLS * (y + infoPtr->iYStart)) + x);
// move to the next cell
x++;
if (x > XCELLS - 1)
{
x = 0;
y++;
}
TagFontToCell(Cell, ch);
DrawTextW(ps->hdc,
&ch,
1,
&Cell->CellInt,
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
SelectObject(ps->hdc,
hOldFont);
}
@@ -219,9 +213,6 @@ SetFont(PMAP infoPtr,
LPWSTR lpFontName)
{
HDC hdc;
WCHAR ch[MAX_GLYPHS];
WORD out[MAX_GLYPHS];
DWORD i, j;
/* Destroy Zoom window, since it was created with older font */
DestroyWindow(infoPtr->hLrgWnd);
@@ -234,7 +225,9 @@ SetFont(PMAP infoPtr,
sizeof(LOGFONTW));
hdc = GetDC(infoPtr->hMapWnd);
infoPtr->CurrentFont.lfHeight = GetDeviceCaps(hdc, LOGPIXELSY) / 5;
infoPtr->CurrentFont.lfHeight = GetDeviceCaps(hdc,
LOGPIXELSY) / 5;
ReleaseDC(infoPtr->hMapWnd, hdc);
infoPtr->CurrentFont.lfCharSet = DEFAULT_CHARSET;
wcsncpy(infoPtr->CurrentFont.lfFaceName,
@@ -247,43 +240,12 @@ SetFont(PMAP infoPtr,
NULL,
TRUE);
infoPtr->pActiveCell = &infoPtr->Cells[0][0];
// Get all the valid glyphs in this font
SelectObject(hdc, infoPtr->hFont);
for (i = 0; i < MAX_GLYPHS; i++)
ch[i] = (WCHAR)i;
if (GetGlyphIndicesW(hdc,
ch,
MAX_GLYPHS,
out,
GGI_MARK_NONEXISTING_GLYPHS) != GDI_ERROR)
/* Test if zoom window must be reopened */
if (infoPtr->pActiveCell != NULL &&
infoPtr->pActiveCell->bLarge)
{
j = 0;
for (i = 0; i < MAX_GLYPHS; i++)
{
if (out[i] != 0xffff)
{
infoPtr->ValidGlyphs[j] = ch[i];
j++;
}
}
infoPtr->NumValidGlyphs = j;
CreateLargeCell(infoPtr);
}
ReleaseDC(infoPtr->hMapWnd, hdc);
infoPtr->NumRows = infoPtr->NumValidGlyphs / XCELLS;
if (infoPtr->NumValidGlyphs % XCELLS)
infoPtr->NumRows += 1;
infoPtr->NumRows = (infoPtr->NumRows > YCELLS) ? infoPtr->NumRows - YCELLS : 0;
SetScrollRange(infoPtr->hMapWnd, SB_VERT, 0, infoPtr->NumRows, FALSE);
SetScrollPos(infoPtr->hMapWnd, SB_VERT, 0, TRUE);
infoPtr->iYStart = 0;
}
@@ -417,7 +379,8 @@ OnCreate(PMAP infoPtr,
SetGrid(infoPtr);
SetScrollPos(infoPtr->hParent, SB_VERT, 0, TRUE);
SetScrollRange(hwnd, SB_VERT, 0, MAX_ROWS, FALSE);
SetScrollPos(hwnd, SB_VERT, 0, TRUE);
Ret = TRUE;
}
@@ -461,8 +424,8 @@ OnVScroll(PMAP infoPtr,
break;
}
infoPtr->iYStart = max(0, infoPtr->iYStart);
infoPtr->iYStart = min(infoPtr->iYStart, infoPtr->NumRows);
infoPtr->iYStart = max(0,
min(infoPtr->iYStart, MAX_ROWS));
iYDiff = iOldYStart - infoPtr->iYStart;
if (iYDiff)
@@ -524,7 +487,7 @@ OnPaint(PMAP infoPtr,
{
return;
}
ps.hdc = (HDC)wParam;
hdc = (HDC)wParam;
}
else
{

View File

@@ -7,13 +7,10 @@
#include <winuser.h>
#include <wingdi.h>
#include "resource.h"
#define SIZEOF(_v) (sizeof(_v) / sizeof(*_v))
#define MAX_GLYPHS 65536
#define XCELLS 20
#define YCELLS 10
#define XLARGE 45
@@ -47,11 +44,6 @@ typedef struct _MAP
HFONT hFont;
LOGFONTW CurrentFont;
INT iYStart;
INT NumRows;
USHORT ValidGlyphs[MAX_GLYPHS];
USHORT NumValidGlyphs;
} MAP, *PMAP;
typedef struct {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -114,24 +114,27 @@ extern void SaveSettings(void)
{
HKEY hKey = NULL;
if (RegCreateKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, NULL, &hKey, NULL) == ERROR_SUCCESS)
if (RegCreateKey(HKEY_CURRENT_USER, g_szGeneralRegKey, &hKey) == ERROR_SUCCESS)
{
TCHAR szBuffer[MAX_PATH];
if (RegOpenKeyEx(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, KEY_SET_VALUE, &hKey) == ERROR_SUCCESS)
{
TCHAR szBuffer[MAX_PATH];
hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO);
ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
hWnd = GetDlgItem(hCharmapDlg, IDC_FONTCOMBO);
ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
if(*szBuffer != '\0')
RegSetValueEx(hKey, _T("Font"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
if(*szBuffer != '\0')
RegSetValueEx(hKey, _T("Font"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET);
ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
hWnd = GetDlgItem(hCharmapDlg, IDC_COMBO_CHARSET);
ComboBox_GetText(hWnd, szBuffer, MAX_PATH);
if(*szBuffer != '\0')
RegSetValueEx(hKey, _T("CodePage"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
if(*szBuffer != '\0')
RegSetValueEx(hKey, _T("CodePage"), 0, REG_SZ, (LPBYTE) szBuffer, (DWORD) MAX_PATH);
RegSetValueEx(hKey, _T("Advanced"), 0, REG_DWORD, (LPBYTE)&Settings.IsAdvancedView, (DWORD) sizeof(DWORD));
RegSetValueEx(hKey, _T("Advanced"), 0, REG_DWORD, (LPBYTE)&Settings.IsAdvancedView, (DWORD) sizeof(DWORD));
RegCloseKey(hKey);
RegCloseKey(hKey);
}
}
}

View File

@@ -1,27 +0,0 @@
PROJECT(CHARMAP)
set_cpp(WITH_RTTI WITH_RUNTIME WITH_EXCEPTIONS)
if(NOT MSVC)
# HACK: this should be enabled globally!
add_compile_flags_language("-std=c++11" "CXX")
endif()
include_directories(
${REACTOS_SOURCE_DIR}/lib/atl
includes)
list(APPEND SOURCE
precomp.h
MainWindow.cpp
)
add_library(charmap SHARED
${SOURCE}
charmap.rc)
set_module_type(charmap win32gui UNICODE)
target_link_libraries(charmap uuid atlnew wine)
add_importlibs(charmap advapi32 user32 gdi32 comctl32 version msvcrt kernel32 ole32 uxtheme ntdll)
add_pch(charmap precomp.h SOURCE)
add_cd_file(TARGET charmap DESTINATION reactos/system32 FOR all)

View File

@@ -1,94 +0,0 @@
/*
* PROJECT: ReactOS Character Map
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/charmap/cell.cpp
* PURPOSE: Class for each individual cell
* COPYRIGHT: Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
*/
#include "precomp.h"
#include "Cell.h"
/* DATA *****************************************************/
/* PUBLIC METHODS **********************************************/
CCell::CCell(
_In_ HWND hParent
) :
CCell(hParent, RECT{0})
{
}
CCell::CCell(
_In_ HWND hParent,
_In_ RECT& CellCoordinates
) :
m_hParent(hParent),
m_CellCoordinates(CellCoordinates),
m_Char(L'*'),
m_bHasFocus(false),
m_bIsLarge(false)
{
}
CCell::~CCell()
{
}
bool
CCell::OnPaint(_In_ PAINTSTRUCT &PaintStruct)
{
// Check if this cell is in our paint region
BOOL NeedsPaint; RECT rect;
NeedsPaint = IntersectRect(&rect,
&PaintStruct.rcPaint,
&m_CellCoordinates);
if (NeedsPaint == FALSE)
return false;
// Draw the cell border
BOOL b = Rectangle(PaintStruct.hdc,
m_CellCoordinates.left,
m_CellCoordinates.top,
m_CellCoordinates.right,
m_CellCoordinates.bottom);
// Calculate an internal drawing canvas for the cell
RECT Internal;
CopyRect(&Internal, &m_CellCoordinates);
InflateRect(&Internal, -1, -1);
// Check if this cell has focus
if (m_bHasFocus)
{
// Draw the smaller cell to make it look selected
Rectangle(PaintStruct.hdc,
Internal.left,
Internal.top,
Internal.right,
Internal.bottom);
}
int Success;
Success = DrawTextW(PaintStruct.hdc,
&m_Char,
1,
&Internal,
DT_CENTER | DT_VCENTER | DT_SINGLELINE);
return (Success != 0);
}
void
CCell::SetCellCoordinates(
_In_ RECT& Coordinates
)
{
m_CellCoordinates = Coordinates;
}

View File

@@ -1,37 +0,0 @@
#pragma once
class CCell
{
private:
HWND m_hParent;
RECT m_CellCoordinates;
bool m_bHasFocus;
bool m_bIsLarge;
WCHAR m_Char;
public:
CCell(
_In_ HWND hParent
);
CCell(
_In_ HWND hParent,
_In_ RECT& CellLocation
);
~CCell();
LPRECT GetCellCoordinates() { return &m_CellCoordinates; }
void SetFocus(_In_ bool HasFocus) { m_bHasFocus = HasFocus; }
WCHAR GetChar() { return m_Char; }
void SetChar(_In_ WCHAR ch) { m_Char = ch; }
bool OnPaint(
_In_ PAINTSTRUCT &PaintStruct
);
void SetCellCoordinates(
_In_ RECT& Coordinates
);
};

View File

@@ -1,523 +0,0 @@
/*
* PROJECT: ReactOS Character Map
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/charmap/GridView.cpp
* PURPOSE: Class for for the window which contains the font matrix
* COPYRIGHT: Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
*/
#include "precomp.h"
#include "GridView.h"
#include "Cell.h"
/* DATA *****************************************************/
extern HINSTANCE g_hInstance;
/* PUBLIC METHODS **********************************************/
CGridView::CGridView() :
m_xNumCells(20),
m_yNumCells(10),
m_ScrollPosition(0),
m_NumRows(0)
{
m_szMapWndClass = L"CharGridWClass";
}
CGridView::~CGridView()
{
}
bool
CGridView::Create(
_In_ HWND hParent
)
{
WNDCLASSW wc = { 0 };
wc.style = CS_DBLCLKS;
wc.lpfnWndProc = MapWndProc;
wc.cbWndExtra = sizeof(CGridView *);
wc.hInstance = g_hInstance;
wc.hCursor = LoadCursorW(NULL, (LPWSTR)IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszClassName = m_szMapWndClass;
if (RegisterClassW(&wc))
{
m_hwnd = CreateWindowExW(0,
m_szMapWndClass,
NULL,
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL,
0,0,0,0,
hParent,
NULL,
g_hInstance,
this);
}
return !!(m_hwnd != NULL);
}
bool
CGridView::SetFont(
_In_ CAtlString& FontName
)
{
// Create a temperary container for the new font
CurrentFont NewFont = { 0 };
NewFont.FontName = FontName;
// Get the DC for the full grid window
HDC hdc;
hdc = GetDC(m_hwnd);
if (hdc == NULL) return false;
// Setup the logfont structure
NewFont.Font.lfHeight = 0; // This is set in WM_SIZE
NewFont.Font.lfCharSet = DEFAULT_CHARSET;
StringCchCopyW(NewFont.Font.lfFaceName, LF_FACESIZE, FontName);
// Get a handle to the new font
NewFont.hFont = CreateFontIndirectW(&NewFont.Font);
if (NewFont.hFont == NULL)
{
ReleaseDC(m_hwnd, hdc);
return false;
}
// Setup an array of all possible non-BMP indices
WCHAR ch[MAX_GLYPHS];
for (int i = 0; i < MAX_GLYPHS; i++)
ch[i] = (WCHAR)i;
HFONT hOldFont;
hOldFont = (HFONT)SelectObject(hdc, NewFont.hFont);
// Translate all the indices into glyphs
WORD out[MAX_GLYPHS];
DWORD Status;
Status = GetGlyphIndicesW(hdc,
ch,
MAX_GLYPHS,
out,
GGI_MARK_NONEXISTING_GLYPHS);
ReleaseDC(m_hwnd, hdc);
if (Status == GDI_ERROR)
{
SelectObject(hdc, hOldFont);
return false;
}
// Loop all the glyphs looking for valid ones
// and store those in our font data
int j = 0;
for (int i = 0; i < MAX_GLYPHS; i++)
{
if (out[i] != 0xffff)
{
NewFont.ValidGlyphs[j] = ch[i];
j++;
}
}
NewFont.NumValidGlyphs = j;
// Calculate the number of rows required to hold all glyphs
m_NumRows = NewFont.NumValidGlyphs / m_xNumCells;
if (NewFont.NumValidGlyphs % m_xNumCells)
m_NumRows += 1;
// Set the scrollbar in relation to the rows
SetScrollRange(m_hwnd, SB_VERT, 0, m_NumRows - m_yNumCells, FALSE);
// We're done, update the current font
m_CurrentFont = NewFont;
// We changed the font, we'll need to repaint the whole window
InvalidateRect(m_hwnd,
NULL,
TRUE);
return true;
}
/* PRIVATE METHODS **********************************************/
bool
CGridView::UpdateCellCoordinates(
)
{
// Go through all the cells and calculate
// their coordinates within the grid
for (int y = 0; y < m_yNumCells; y++)
for (int x = 0; x < m_xNumCells; x++)
{
RECT CellCoordinates;
CellCoordinates.left = x * m_CellSize.cx;
CellCoordinates.top = y * m_CellSize.cy;
CellCoordinates.right = (x + 1) * m_CellSize.cx + 1;
CellCoordinates.bottom = (y + 1) * m_CellSize.cy + 1;
m_Cells[y][x]->SetCellCoordinates(CellCoordinates);
}
return true;
}
LRESULT
CGridView::OnCreate(
_In_ HWND hwnd,
_In_ HWND hParent
)
{
m_hwnd = hwnd;
m_hParent = hParent;
// C++ doesn't allow : "CCells ***C = new CCell***[x * y]"
// so we have to build the 2d array up manually
m_Cells = new CCell**[m_yNumCells]; // rows
for (int i = 0; i < m_yNumCells; i++)
m_Cells[i] = new CCell*[m_xNumCells]; // columns
for (int y = 0; y < m_yNumCells; y++)
for (int x = 0; x < m_xNumCells; x++)
{
m_Cells[y][x] = new CCell(m_hwnd);
}
// Give the first cell focus
SetCellFocus(m_Cells[0][0]);
return 0;
}
LRESULT
CGridView::OnSize(
_In_ INT Width,
_In_ INT Height
)
{
// Get the client area of the main dialog
RECT ParentRect;
GetClientRect(m_hParent, &ParentRect);
// Calculate the grid size using the parent
m_ClientCoordinates.left = ParentRect.left + 25;
m_ClientCoordinates.top = ParentRect.top + 50;
m_ClientCoordinates.right = ParentRect.right - m_ClientCoordinates.left - 10;
m_ClientCoordinates.bottom = ParentRect.bottom - m_ClientCoordinates.top - 70;
// Resize the grid window
SetWindowPos(m_hwnd,
NULL,
m_ClientCoordinates.left,
m_ClientCoordinates.top,
m_ClientCoordinates.right,
m_ClientCoordinates.bottom,
SWP_NOZORDER | SWP_SHOWWINDOW);
// Get the client area we can draw on. The position we set above includes
// a scrollbar which we obvioulsy can't draw on. GetClientRect gives us
// the size without the scroll, and it's more efficient than getting the
// scroll metrics and calculating the size from that
RECT ClientRect;
GetClientRect(m_hwnd, &ClientRect);
m_CellSize.cx = ClientRect.right / m_xNumCells;
m_CellSize.cy = ClientRect.bottom / m_yNumCells;
// Let all the cells know about their new coords
UpdateCellCoordinates();
// We scale the font size up or down depending on the cell size
if (m_CurrentFont.hFont)
{
// Delete the existing font
DeleteObject(m_CurrentFont.hFont);
HDC hdc;
hdc = GetDC(m_hwnd);
if (hdc)
{
// Update the font size with respect to the cell size
m_CurrentFont.Font.lfHeight = (m_CellSize.cy - 5);
m_CurrentFont.hFont = CreateFontIndirectW(&m_CurrentFont.Font);
ReleaseDC(m_hwnd, hdc);
}
}
// Redraw the whole grid
InvalidateRect(m_hwnd, &ClientRect, TRUE);
return 0;
}
VOID
CGridView::OnVScroll(_In_ INT Value,
_In_ INT Pos)
{
INT PrevScrollPosition = m_ScrollPosition;
switch (Value)
{
case SB_LINEUP:
m_ScrollPosition -= 1;
break;
case SB_LINEDOWN:
m_ScrollPosition += 1;
break;
case SB_PAGEUP:
m_ScrollPosition -= m_yNumCells;
break;
case SB_PAGEDOWN:
m_ScrollPosition += m_yNumCells;
break;
case SB_THUMBTRACK:
m_ScrollPosition = Pos;
break;
default:
break;
}
// Make sure we don't scroll past row 0 or max rows
m_ScrollPosition = max(0, m_ScrollPosition);
m_ScrollPosition = min(m_ScrollPosition, m_NumRows);
// Check if there's a difference from the previous position
INT ScrollDiff;
ScrollDiff = PrevScrollPosition - m_ScrollPosition;
if (ScrollDiff)
{
// Set the new scrollbar position in the scroll box
SetScrollPos(m_hwnd,
SB_VERT,
m_ScrollPosition,
TRUE);
// Check if the scrollbar has moved more than the
// number of visible rows (draged or paged)
if (abs(ScrollDiff) < m_yNumCells)
{
RECT rect;
GetClientRect(m_hwnd, &rect);
// Scroll the visible cells which remain within the grid
// and invalidate any new ones which appear from the top / bottom
ScrollWindowEx(m_hwnd,
0,
ScrollDiff * m_CellSize.cy,
&rect,
&rect,
NULL,
NULL,
SW_INVALIDATE);
}
else
{
// All the cells need to be redrawn
InvalidateRect(m_hwnd,
NULL,
TRUE);
}
}
}
LRESULT
CGridView::OnPaint(
_In_opt_ HDC hdc
)
{
PAINTSTRUCT PaintStruct = { 0 };
HDC LocalHdc = NULL;
BOOL bSuccess = FALSE;
// Check if we were passed a DC
if (hdc == NULL)
{
// We weren't, let's get one
LocalHdc = BeginPaint(m_hwnd, &PaintStruct);
if (LocalHdc) bSuccess = TRUE;
}
else
{
// Use the existing DC and just get the region to paint
bSuccess = GetUpdateRect(m_hwnd,
&PaintStruct.rcPaint,
TRUE);
if (bSuccess)
{
// Update the struct with the DC we were passed
PaintStruct.hdc = (HDC)hdc;
}
}
// Make sure we have a valid DC
if (bSuccess)
{
// Paint the grid and chars
DrawGrid(&PaintStruct);
if (LocalHdc)
{
EndPaint(m_hwnd, &PaintStruct);
}
}
return 0;
}
LRESULT
CALLBACK
CGridView::MapWndProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
CGridView *This;
LRESULT RetCode = 0;
// Get the object pointer from window context
This = (CGridView *)GetWindowLongPtr(hwnd, GWLP_USERDATA);
if (This == NULL)
{
// Check that this isn't a create message
if (uMsg != WM_CREATE)
{
// Don't handle null info pointer
goto HandleDefaultMessage;
}
}
switch (uMsg)
{
case WM_CREATE:
{
// Get the object pointer from the create param
This = (CGridView *)((LPCREATESTRUCT)lParam)->lpCreateParams;
// Store the pointer in the window's global user data
SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)This);
This->OnCreate(hwnd, ((LPCREATESTRUCTW)lParam)->hwndParent);
break;
}
case WM_SIZE:
{
INT Width, Height;
Width = LOWORD(lParam);
Height = HIWORD(lParam);
This->OnSize(Width, Height);
break;
}
case WM_VSCROLL:
{
INT Value, Pos;
Value = LOWORD(wParam);
Pos = HIWORD(wParam);
This->OnVScroll(Value, Pos);
break;
}
case WM_PAINT:
{
This->OnPaint((HDC)wParam);
break;
}
case WM_DESTROY:
{
This->DeleteCells();
break;
}
default:
{
HandleDefaultMessage:
RetCode = DefWindowProcW(hwnd, uMsg, wParam, lParam);
break;
}
}
return RetCode;
}
void
CGridView::DrawGrid(
_In_ LPPAINTSTRUCT PaintStruct
)
{
// Calculate which glyph to start at based on scroll position
int i;
i = m_xNumCells * m_ScrollPosition;
// Make sure we have the correct font on the DC
HFONT hOldFont;
hOldFont = (HFONT)SelectFont(PaintStruct->hdc,
m_CurrentFont.hFont);
// Traverse all the cells
for (int y = 0; y < m_yNumCells; y++)
for (int x = 0; x < m_xNumCells; x++)
{
// Update the glyph for this cell
WCHAR ch = (WCHAR)m_CurrentFont.ValidGlyphs[i];
m_Cells[y][x]->SetChar(ch);
// Tell it to paint itself
m_Cells[y][x]->OnPaint(*PaintStruct);
i++;
}
SelectObject(PaintStruct->hdc, hOldFont);
}
void
CGridView::DeleteCells()
{
if (m_Cells == nullptr)
return;
// Free cells withing the 2d array
for (int i = 0; i < m_yNumCells; i++)
delete[] m_Cells[i];
delete[] m_Cells;
m_Cells = nullptr;
}
void
CGridView::SetCellFocus(
_In_ CCell* NewActiveCell
)
{
if (m_ActiveCell)
{
// Remove focus from any existing cell
m_ActiveCell->SetFocus(false);
InvalidateRect(m_hwnd, m_ActiveCell->GetCellCoordinates(), TRUE);
}
// Set the new active cell and give it focus
m_ActiveCell = NewActiveCell;
m_ActiveCell->SetFocus(true);
}

View File

@@ -1,92 +0,0 @@
#pragma once
#include "Cell.h"
#define MAX_GLYPHS 0xFFFF
struct CurrentFont
{
CAtlStringW FontName;
LOGFONTW Font;
HFONT hFont;
USHORT ValidGlyphs[MAX_GLYPHS];
USHORT NumValidGlyphs;
};
class CGridView
{
private:
CAtlStringW m_szMapWndClass;
HWND m_hwnd;
HWND m_hParent;
int m_xNumCells;
int m_yNumCells;
RECT m_ClientCoordinates;
SIZE m_CellSize;
CCell*** m_Cells; // *m_Cells[][];
CCell *m_ActiveCell;
INT m_ScrollPosition;
int m_NumRows;
CurrentFont m_CurrentFont;
public:
CGridView();
~CGridView();
bool Create(
_In_ HWND hParent
);
bool SetFont(
_In_ CAtlString& FontName
);
HWND GetHwnd() { return m_hwnd; }
private:
static LRESULT
CALLBACK
MapWndProc(HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
LRESULT OnCreate(
_In_ HWND hwnd,
_In_ HWND hParent
);
LRESULT OnSize(
_In_ INT Width,
_In_ INT Height
);
VOID OnVScroll(
_In_ INT Value,
_In_ INT Pos
);
LRESULT OnPaint(
_In_opt_ HDC hdc
);
bool UpdateCellCoordinates(
);
void DrawGrid(
_In_ LPPAINTSTRUCT PaintStruct
);
void DeleteCells();
void SetCellFocus(
_In_ CCell* NewActiveCell
);
};

View File

@@ -1,537 +0,0 @@
/*
* PROJECT: ReactOS Character Map
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/charmap/MainWindow.cpp
* PURPOSE: Implements the main dialog window
* COPYRIGHT: Copyright 2015 Ged Murphy <gedmurphy@reactos.org>
*/
#include "precomp.h"
#include "MainWindow.h"
/* DATA *****************************************************/
#define ID_ABOUT 0x1
HINSTANCE g_hInstance = NULL;
/* PUBLIC METHODS **********************************************/
CCharMapWindow::CCharMapWindow(void) :
m_hMainWnd(NULL),
m_hStatusBar(NULL),
m_CmdShow(0),
m_hRichEd(NULL),
m_GridView(nullptr)
{
m_GridView = new CGridView();
}
CCharMapWindow::~CCharMapWindow(void)
{
}
bool
CCharMapWindow::Create(_In_ HINSTANCE hInst,
_In_ int nCmdShow)
{
INITCOMMONCONTROLSEX icex;
CAtlStringW szAppName;
int Ret = 1;
// Store the instance
g_hInstance = hInst;
m_CmdShow = nCmdShow;
// Initialize common controls
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;
InitCommonControlsEx(&icex);
// Load the application name
if (szAppName.LoadStringW(g_hInstance, IDS_TITLE))
{
// Initialize the main window
if (Initialize(szAppName, nCmdShow))
{
// Run the application
Ret = Run();
// Uninitialize the main window
Uninitialize();
}
}
return (Ret == 0);
}
/* PRIVATE METHODS **********************************************/
bool
CCharMapWindow::Initialize(_In_z_ LPCTSTR lpCaption,
_In_ int nCmdShow)
{
// The dialog has a rich edit text box
m_hRichEd = LoadLibraryW(L"riched20.DLL");
if (m_hRichEd == NULL) return false;
return !!(CreateDialogParamW(g_hInstance,
MAKEINTRESOURCE(IDD_CHARMAP),
NULL,
DialogProc,
(LPARAM)this));
}
void
CCharMapWindow::Uninitialize(void)
{
if (m_hRichEd)
FreeLibrary(m_hRichEd);
}
int
CCharMapWindow::Run(void)
{
MSG Msg;
// Pump the message queue
while (GetMessageW(&Msg, NULL, 0, 0) != 0)
{
TranslateMessage(&Msg);
DispatchMessageW(&Msg);
}
return 0;
}
void
CCharMapWindow::UpdateStatusBar(_In_ bool InMenuLoop)
{
SendMessageW(m_hStatusBar,
SB_SIMPLE,
(WPARAM)InMenuLoop,
0);
}
bool
CCharMapWindow::CreateStatusBar(void)
{
int StatWidths[] = { 110, -1 }; // widths of status bar
bool bRet = FALSE;
// Create the status bar
m_hStatusBar = CreateWindowExW(0,
STATUSCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP,
0, 0, 0, 0,
m_hMainWnd,
(HMENU)IDD_STATUSBAR,
g_hInstance,
NULL);
if (m_hStatusBar)
{
// Create the sections
bRet = (SendMessageW(m_hStatusBar,
SB_SETPARTS,
sizeof(StatWidths) / sizeof(int),
(LPARAM)StatWidths) != 0);
// Set the status bar for multiple parts output
SendMessage(m_hStatusBar, SB_SIMPLE, (WPARAM)FALSE, (LPARAM)0);
}
return bRet;
}
bool
CCharMapWindow::StatusBarLoadString(_In_ HWND hStatusBar,
_In_ INT PartId,
_In_ HINSTANCE hInstance,
_In_ UINT uID)
{
CAtlStringW szMessage;
bool bRet = false;
// Load the string from the resource
if (szMessage.LoadStringW(hInstance, uID))
{
// Display it on the status bar
bRet = (SendMessageW(hStatusBar,
SB_SETTEXT,
(WPARAM)PartId,
(LPARAM)szMessage.GetBuffer()) != 0);
}
return bRet;
}
BOOL
CCharMapWindow::OnCreate(_In_ HWND hDlg)
{
m_hMainWnd = hDlg;
if (!CreateStatusBar())
return FALSE;
if (!m_GridView->Create(hDlg))
return FALSE;
// Load an 'about' option into the system menu
HMENU hSysMenu;
hSysMenu = GetSystemMenu(m_hMainWnd, FALSE);
if (hSysMenu != NULL)
{
CAtlStringW AboutText;
if (AboutText.LoadStringW(IDS_ABOUT))
{
AppendMenuW(hSysMenu, MF_SEPARATOR, 0, NULL);
AppendMenuW(hSysMenu, MF_STRING, ID_ABOUT, AboutText);
}
}
// Add all the fonts to the
if (!CreateFontComboBox())
return FALSE;
ChangeMapFont();
// Configure Richedit control for sending notification changes.
DWORD evMask;
evMask = SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_GETEVENTMASK, 0, 0);
evMask |= ENM_CHANGE;
SendDlgItemMessage(hDlg, IDC_TEXTBOX, EM_SETEVENTMASK, 0, (LPARAM)evMask);
// Display the window according to the user request
ShowWindow(m_hMainWnd, m_CmdShow);
return TRUE;
}
BOOL
CCharMapWindow::OnSize(
_In_ WPARAM wParam
)
{
RECT rcClient, rcStatus;
INT lvHeight, iStatusHeight;
// Resize the status bar
SendMessage(m_hStatusBar, WM_SIZE, 0, 0);
// Get the statusbar rect and save the height
GetWindowRect(m_hStatusBar, &rcStatus);
iStatusHeight = rcStatus.bottom - rcStatus.top;
// Get the full client rect
GetClientRect(m_hMainWnd, &rcClient);
// Calculate the remaining height for the gridview
lvHeight = rcClient.bottom - iStatusHeight;
// Resize the grid view
SendMessageW(m_GridView->GetHwnd(), WM_SIZE, wParam, 0);
return TRUE;
}
BOOL
CCharMapWindow::OnNotify(_In_ LPARAM lParam)
{
LPNMHDR NmHdr = (LPNMHDR)lParam;
LRESULT Ret = 0;
switch (NmHdr->code)
{
case NM_RCLICK:
{
break;
}
case NM_DBLCLK:
case NM_RETURN:
{
break;
}
}
return Ret;
}
BOOL
CCharMapWindow::OnContext(_In_ LPARAM lParam)
{
return 0;// m_GridView->OnContextMenu(lParam);
}
BOOL
CCharMapWindow::OnCommand(_In_ WPARAM wParam,
_In_ LPARAM /*lParam*/)
{
LRESULT RetCode = 0;
WORD Msg;
// Get the message
Msg = LOWORD(wParam);
switch (Msg)
{
case IDC_CHECK_ADVANCED:
break;
case IDC_FONTCOMBO:
if (HIWORD(wParam) == CBN_SELCHANGE)
{
ChangeMapFont();
}
break;
default:
// We didn't handle it
RetCode = -1;
break;
}
return RetCode;
}
BOOL
CCharMapWindow::OnDestroy(void)
{
// Clear the user data pointer
SetWindowLongPtr(m_hMainWnd, GWLP_USERDATA, 0);
// Break the message loop
PostQuitMessage(0);
return TRUE;
}
INT_PTR CALLBACK
CCharMapWindow::DialogProc(
_In_ HWND hwndDlg,
_In_ UINT Msg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
)
{
CCharMapWindow *This;
LRESULT RetCode = 0;
// Get the object pointer from window context
This = (CCharMapWindow *)GetWindowLongPtr(hwndDlg, GWLP_USERDATA);
if (This == NULL)
{
// Check that this isn't a create message
if (Msg != WM_INITDIALOG)
{
// Don't handle null info pointer
return FALSE;
}
}
switch (Msg)
{
case WM_INITDIALOG:
{
// Get the object pointer from the create param
This = (CCharMapWindow *)lParam;
// Store the pointer in the window's global user data
SetWindowLongPtr(hwndDlg, GWLP_USERDATA, (LONG_PTR)This);
// Call the create handler
return This->OnCreate(hwndDlg);
}
case WM_SIZE:
{
return This->OnSize(wParam);
}
case WM_NOTIFY:
{
return This->OnNotify(lParam);
}
case WM_CONTEXTMENU:
{
return This->OnContext(lParam);
}
case WM_COMMAND:
{
return This->OnCommand(wParam, lParam);
}
case WM_SYSCOMMAND:
switch (wParam)
{
case ID_ABOUT:
// Apportion blame
MessageBoxW(This->m_hMainWnd,
L"ReactOS Character Map\r\nCopyright Ged Murphy 2015",
L"About",
MB_OK | MB_APPLMODAL);
break;
}
break;
case WM_ENTERMENULOOP:
{
This->UpdateStatusBar(true);
return TRUE;
}
case WM_EXITMENULOOP:
{
This->UpdateStatusBar(false);
return TRUE;
}
case WM_CLOSE:
{
// Destroy the main window
return DestroyWindow(hwndDlg);
}
case WM_DESTROY:
{
// Call the destroy handler
return This->OnDestroy();
}
}
return FALSE;
}
struct EnumFontParams
{
CCharMapWindow *This;
HWND hCombo;
};
int
CALLBACK
CCharMapWindow::EnumDisplayFont(ENUMLOGFONTEXW *lpelfe,
NEWTEXTMETRICEXW *lpntme,
DWORD FontType,
LPARAM lParam)
{
EnumFontParams *Params = (EnumFontParams *)lParam;
LPWSTR pszName = lpelfe->elfLogFont.lfFaceName;
/* Skip rotated font */
if (pszName[0] == L'@') return 1;
/* make sure font doesn't already exist in our list */
if (SendMessageW(Params->hCombo,
CB_FINDSTRINGEXACT,
0,
(LPARAM)pszName) == CB_ERR)
{
INT idx;
idx = (INT)SendMessageW(Params->hCombo,
CB_ADDSTRING,
0,
(LPARAM)pszName);
/* record the font's attributes (Fixedwidth and Truetype) */
BOOL fFixed = (lpelfe->elfLogFont.lfPitchAndFamily & FIXED_PITCH) ? TRUE : FALSE;
BOOL fTrueType = (lpelfe->elfLogFont.lfOutPrecision == OUT_STROKE_PRECIS) ? TRUE : FALSE;
/* store this information in the list-item's userdata area */
SendMessageW(Params->hCombo,
CB_SETITEMDATA,
idx,
MAKEWPARAM(fFixed, fTrueType));
}
return 1;
}
bool
CCharMapWindow::CreateFontComboBox()
{
HWND hCombo;
hCombo = GetDlgItem(m_hMainWnd, IDC_FONTCOMBO);
NONCLIENTMETRICSW NonClientMetrics;
NonClientMetrics.cbSize = sizeof(NONCLIENTMETRICSW);
SystemParametersInfoW(SPI_GETNONCLIENTMETRICS,
sizeof(NONCLIENTMETRICSW),
&NonClientMetrics,
0);
// Get a handle to the font
HFONT GuiFont;
GuiFont = CreateFontIndirectW(&NonClientMetrics.lfMessageFont);
// Set the font used in the combo box
SendMessageW(hCombo,
WM_SETFONT,
(WPARAM)GuiFont,
0);
// Set the fonts which we want to enumerate
LOGFONTW FontsToEnum;
ZeroMemory(&FontsToEnum, sizeof(LOGFONTW));
FontsToEnum.lfCharSet = DEFAULT_CHARSET;
// Set the params we want to pass to the callback
EnumFontParams Params;
Params.This = this;
Params.hCombo = hCombo;
// Get a DC for combo box
HDC hdc;
hdc = GetDC(hCombo);
// Enumerate all the fonts
int ret;
ret = EnumFontFamiliesExW(hdc,
&FontsToEnum,
(FONTENUMPROCW)EnumDisplayFont,
(LPARAM)&Params,
0);
ReleaseDC(hCombo, hdc);
DeleteObject(GuiFont);
// Select the first item in the list
SendMessageW(hCombo,
CB_SETCURSEL,
0,
0);
return (ret == 1);
}
bool
CCharMapWindow::ChangeMapFont(
)
{
HWND hCombo;
hCombo = GetDlgItem(m_hMainWnd, IDC_FONTCOMBO);
INT Length;
Length = GetWindowTextLengthW(hCombo);
if (!Length) return false;
CAtlStringW FontName;
FontName.Preallocate(Length);
SendMessageW(hCombo,
WM_GETTEXT,
FontName.GetAllocLength(),
(LPARAM)FontName.GetBuffer());
return m_GridView->SetFont(FontName);
}

View File

@@ -1,84 +0,0 @@
#pragma once
#include "GridView.h"
class CCharMapWindow
{
HWND m_hMainWnd;
HWND m_hStatusBar;
int m_CmdShow;
HMODULE m_hRichEd;
CGridView *m_GridView;
public:
CCharMapWindow(void);
~CCharMapWindow(void);
bool Create(
_In_ HINSTANCE hInst,
_In_ int nCmdShow
);
private:
static INT_PTR CALLBACK DialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
bool Initialize(
_In_z_ LPCTSTR lpCaption,
_In_ int nCmdShow
);
int Run();
void Uninitialize(void);
BOOL OnCreate(
_In_ HWND hwnd
);
BOOL OnDestroy(void);
BOOL OnSize(void);
BOOL OnNotify(
_In_ LPARAM lParam
);
BOOL OnContext(
_In_ LPARAM lParam
);
BOOL OnCommand(
_In_ WPARAM wParam,
LPARAM lParam
);
bool CreateStatusBar(void);
bool StatusBarLoadString(
_In_ HWND hStatusBar,
_In_ INT PartId,
_In_ HINSTANCE hInstance,
_In_ UINT uID
);
void UpdateStatusBar(
_In_ bool InMenuLoop
);
static int CALLBACK
EnumDisplayFont(
ENUMLOGFONTEXW *lpelfe,
NEWTEXTMETRICEXW *lpntme,
DWORD FontType,
LPARAM lParam
);
bool CreateFontComboBox(
);
bool ChangeMapFont(
);
};

View File

@@ -1,20 +0,0 @@
/*
* PROJECT: ReactOS Device Managment
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/mscutils/devmgmt/devmgmt.c
* PURPOSE: Bootstrap for the device manager
* COPYRIGHT: Copyright 2006 Ged Murphy <gedmurphy@gmail.com>
*/
#include "precomp.h"
#include "MainWindow.h"
int WINAPI
wWinMain(HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
CCharMapWindow CharMap;
return CharMap.Create(hThisInstance, nCmdShow);
}

View File

@@ -1,101 +0,0 @@
#include <windef.h>
#include <winuser.h>
#include <richedit.h>
#include "resource.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDI_ICON ICON "res/charmap.ico"
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Character Map"
#define REACTOS_STR_INTERNAL_NAME "charmap"
#define REACTOS_STR_ORIGINAL_FILENAME "charmap.exe"
//#include <reactos/version.rc>
//#include <reactos/manifest_exe.rc>
/* UTF-8 */
#pragma code_page(65001)
#ifdef LANGUAGE_BG_BG
#include "lang/bg-BG.rc"
#endif
#ifdef LANGUAGE_CA_ES
#include "lang/ca-ES.rc"
#endif
#ifdef LANGUAGE_CS_CZ
#include "lang/cs-CZ.rc"
#endif
#ifdef LANGUAGE_DE_DE
#include "lang/de-DE.rc"
#endif
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif
#ifdef LANGUAGE_EL_GR
#include "lang/el-GR.rc"
#endif
#ifdef LANGUAGE_ES_ES
#include "lang/es-ES.rc"
#endif
#ifdef LANGUAGE_FR_FR
#include "lang/fr-FR.rc"
#endif
#ifdef LANGUAGE_HE_IL
#include "lang/he-IL.rc"
#endif
#ifdef LANGUAGE_ID_ID
#include "lang/id-ID.rc"
#endif
#ifdef LANGUAGE_IT_IT
#include "lang/it-IT.rc"
#endif
#ifdef LANGUAGE_JA_JP
#include "lang/ja-JP.rc"
#endif
#ifdef LANGUAGE_KO_KR
#include "lang/ko-KR.rc"
#endif
#ifdef LANGUAGE_LT_LT
#include "lang/lt-LT.rc"
#endif
#ifdef LANGUAGE_NL_NL
#include "lang/nl-NL.rc"
#endif
#ifdef LANGUAGE_NB_NO
#include "lang/no-NO.rc"
#endif
#ifdef LANGUAGE_PL_PL
#include "lang/pl-PL.rc"
#endif
#ifdef LANGUAGE_PT_BR
#include "lang/pt-BR.rc"
#endif
#ifdef LANGUAGE_RO_RO
#include "lang/ro-RO.rc"
#endif
#ifdef LANGUAGE_RU_RU
#include "lang/ru-RU.rc"
#endif
#ifdef LANGUAGE_SK_SK
#include "lang/sk-SK.rc"
#endif
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_SV_SE
#include "lang/sv-SE.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,22 +0,0 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDD_CHARMAP DIALOGEX 6, 6, 290, 224
FONT 8, "MS Shell Dlg", 0, 0
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_SIZEBOX
CAPTION "ReactOS Character Map"
BEGIN
LTEXT "Font:", IDC_STATIC, 6, 7, 24, 9
COMBOBOX IDC_FONTCOMBO, 28, 5, 150, 210, WS_CHILD | WS_VISIBLE |
WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS
LTEXT "Characters to copy:", IDC_STATIC, 6, 188, 66, 9
CONTROL "", IDC_TEXTBOX, RICHEDIT_CLASS, ES_AUTOHSCROLL | WS_BORDER |
WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13
DEFPUSHBUTTON "Select", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "Copy", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
END
STRINGTABLE
BEGIN
IDS_ABOUT "A&bout..."
IDS_TITLE "Character Map"
END

View File

@@ -1,35 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
IDD_CHARMAP DIALOGEX 6, 6, 292, 224
FONT 8, "MS Shell Dlg", 0, 0
STYLE WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "ReactOS Damga Eşlemi"
BEGIN
LTEXT "Yazı Tipi:", IDC_STATIC, 6, 7, 24, 9
COMBOBOX IDC_FONTCOMBO, 36, 5, 210, 210, WS_CHILD | WS_VISIBLE |
WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT | CBS_HASSTRINGS
LTEXT "Çoğaltılacak Damgalar:", IDC_STATIC, 6, 188, 66, 9
CONTROL "", IDC_TEXTBOX, RICHEDIT_CLASS, ES_AUTOHSCROLL | WS_BORDER |
WS_CHILD | WS_VISIBLE | WS_TABSTOP, 74, 186, 114, 13
DEFPUSHBUTTON "Seç", IDC_SELECT, 194, 186, 44, 13
PUSHBUTTON "Çoğalt", IDC_COPY, 242, 186, 44, 13, WS_DISABLED
//CONTROL "Gelişmiş Görünüm", IDC_CHECK_ADVANCED, "Button", BS_AUTOCHECKBOX |
// WS_TABSTOP, 8, 208, 95, 10
//LTEXT "Damga Öbeği:", IDC_STATIC, 8, 8, 48, 8
//COMBOBOX IDC_COMBO_CHARSET, 72, 4, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
//LTEXT "Takımla:", IDC_STATIC, 8, 28, 50, 8
//COMBOBOX IDC_COMBO_GROUPBY, 72, 24, 116, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
//PUSHBUTTON "Ara", IDC_BUTTON_SEARCH, 200, 44, 50, 14
//EDITTEXT IDC_EDIT_SEARCH, 72, 44, 116, 14, ES_AUTOHSCROLL
//LTEXT "Ada Göre Ara:", IDC_STATIC, 8, 48, 42, 8
//LTEXT "Evrenlik Kod:", IDC_STATIC, 200, 8, 30, 8
//EDITTEXT IDC_EDIT_UNICODE, 236, 4, 28, 12, ES_AUTOHSCROLL
END
STRINGTABLE
BEGIN
IDS_ABOUT "&Üzerine..."
IDS_TITLE "Damga Eşlemi"
END

View File

@@ -1,54 +0,0 @@
//#pragma once
#ifndef __REACTOS__
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <windowsx.h>
#include <setupapi.h>
#include <cfgmgr32.h>
#include <commctrl.h>
#include <Uxtheme.h>
#include <richedit.h>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // some CString constructors will be explicit
#include <tchar.h>
#include <atlbase.h>
#include <atlstr.h>
#include <atlcoll.h>
#include <strsafe.h>
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#include "resource.h"
#else
#include <string.h>
#include <wchar.h>
#include <tchar.h>
#include <windef.h>
#include <winbase.h>
#include <winreg.h>
#include <wingdi.h>
#include <winnls.h>
#include <wincon.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <strsafe.h>
#include <commctrl.h>
#include <cfgmgr32.h>
#include <uxtheme.h>
#include <atlbase.h>
#include <atlstr.h>
#include <atlcoll.h>
//WINE_DEFAULT_DEBUG_CHANNEL(charmap);
#endif

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View File

@@ -1,30 +0,0 @@
#pragma once
#define IDC_STATIC -1
#define IDI_ICON 100
#define IDD_CHARMAP 200
#define IDD_ABOUTBOX 201
#define IDD_STATUSBAR 202
#define IDD_ADVANCED 203
#define IDC_FONTCOMBO 1001
#define IDC_CMHELP 1002
#define IDC_FONTMAP 1003
#define IDC_TEXTBOX 1004
#define IDC_SELECT 1005
#define IDC_COPY 1006
#define IDC_ADVVIEW 1007
#define IDC_DISPLAY 1008
#define IDC_LICENSE_EDIT 1009
#define IDC_COMBO_CHARSET 1010
#define IDC_COMBO_GROUPBY 1011
#define IDC_BUTTON_SEARCH 1012
#define IDC_EDIT_SEARCH 1013
#define IDC_EDIT_UNICODE 1014
#define IDC_CHECK_ADVANCED 1017
#define IDS_LICENSE 2010
#define IDS_ABOUT 2011
#define IDS_TITLE 2012

View File

@@ -1,14 +0,0 @@
list(APPEND SOURCE
clipbrd.c
cliputils.c
fileutils.c
scrollutils.c
winutils.c
precomp.h)
add_executable(clipbrd ${SOURCE} clipbrd.rc)
add_pch(clipbrd precomp.h SOURCE)
set_module_type(clipbrd win32gui UNICODE)
add_importlibs(clipbrd hhctrl user32 gdi32 comdlg32 shell32 msvcrt kernel32)
add_cd_file(TARGET clipbrd DESTINATION reactos/system32 FOR all)

View File

@@ -1,597 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/clipbrd.c
* PURPOSE: Provides a view of the contents of the ReactOS clipboard.
* PROGRAMMERS: Ricardo Hanke
*/
#include "precomp.h"
static const WCHAR szClassName[] = L"ClipBookWClass";
CLIPBOARD_GLOBALS Globals;
SCROLLSTATE Scrollstate;
static void UpdateLinesToScroll(void)
{
UINT uLinesToScroll;
if (!SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, &uLinesToScroll, 0))
{
Globals.uLinesToScroll = 3;
}
else
{
Globals.uLinesToScroll = uLinesToScroll;
}
}
static void SaveClipboardToFile(void)
{
OPENFILENAMEW sfn;
WCHAR szFileName[MAX_PATH];
WCHAR szFilterMask[MAX_STRING_LEN + 10];
LPWSTR c;
ZeroMemory(&szFilterMask, sizeof(szFilterMask));
c = szFilterMask + LoadStringW(Globals.hInstance, STRING_FORMAT_NT, szFilterMask, MAX_STRING_LEN) + 1;
wcscpy(c, L"*.clp");
ZeroMemory(&szFileName, sizeof(szFileName));
ZeroMemory(&sfn, sizeof(sfn));
sfn.lStructSize = sizeof(sfn);
sfn.hwndOwner = Globals.hMainWnd;
sfn.hInstance = Globals.hInstance;
sfn.lpstrFilter = szFilterMask;
sfn.lpstrFile = szFileName;
sfn.nMaxFile = ARRAYSIZE(szFileName);
sfn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
sfn.lpstrDefExt = L"clp";
if (!GetSaveFileNameW(&sfn))
return;
if (!OpenClipboard(Globals.hMainWnd))
{
ShowLastWin32Error(Globals.hMainWnd);
return;
}
WriteClipboardFile(szFileName, CLIP_FMT_NT /* CLIP_FMT_31 */);
CloseClipboard();
}
static void LoadClipboardDataFromFile(LPWSTR lpszFileName)
{
if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance,
STRING_DELETE_MSG, STRING_DELETE_TITLE,
MB_ICONWARNING | MB_YESNO) != IDYES)
{
return;
}
if (!OpenClipboard(Globals.hMainWnd))
{
ShowLastWin32Error(Globals.hMainWnd);
return;
}
EmptyClipboard();
ReadClipboardFile(lpszFileName);
CloseClipboard();
}
static void LoadClipboardFromFile(void)
{
OPENFILENAMEW ofn;
WCHAR szFileName[MAX_PATH];
WCHAR szFilterMask[MAX_STRING_LEN + 10];
LPWSTR c;
ZeroMemory(&szFilterMask, sizeof(szFilterMask));
c = szFilterMask + LoadStringW(Globals.hInstance, STRING_FORMAT_GEN, szFilterMask, MAX_STRING_LEN) + 1;
wcscpy(c, L"*.clp");
ZeroMemory(&szFileName, sizeof(szFileName));
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = Globals.hMainWnd;
ofn.hInstance = Globals.hInstance;
ofn.lpstrFilter = szFilterMask;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = ARRAYSIZE(szFileName);
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;
if (!GetOpenFileNameW(&ofn))
return;
LoadClipboardDataFromFile(szFileName);
}
static void LoadClipboardFromDrop(HDROP hDrop)
{
WCHAR szFileName[MAX_PATH];
DragQueryFileW(hDrop, 0, szFileName, ARRAYSIZE(szFileName));
DragFinish(hDrop);
LoadClipboardDataFromFile(szFileName);
}
static void SetDisplayFormat(UINT uFormat)
{
CheckMenuItem(Globals.hMenu, Globals.uCheckedItem, MF_BYCOMMAND | MF_UNCHECKED);
Globals.uCheckedItem = uFormat + CMD_AUTOMATIC;
CheckMenuItem(Globals.hMenu, Globals.uCheckedItem, MF_BYCOMMAND | MF_CHECKED);
if (uFormat == 0)
{
Globals.uDisplayFormat = GetAutomaticClipboardFormat();
}
else
{
Globals.uDisplayFormat = uFormat;
}
if (Globals.hDspBmp)
{
DeleteObject(Globals.hDspBmp);
}
ZeroMemory(&Scrollstate, sizeof(Scrollstate));
UpdateWindowScrollState(Globals.hMainWnd, Globals.hDspBmp, &Scrollstate);
InvalidateRect(Globals.hMainWnd, NULL, TRUE);
}
static void InitMenuPopup(HMENU hMenu, LPARAM index)
{
if ((GetMenuItemID(hMenu, 0) == CMD_DELETE) || (GetMenuItemID(hMenu, 1) == CMD_SAVE_AS))
{
if (CountClipboardFormats() == 0)
{
EnableMenuItem(hMenu, CMD_DELETE, MF_GRAYED);
EnableMenuItem(hMenu, CMD_SAVE_AS, MF_GRAYED);
}
else
{
EnableMenuItem(hMenu, CMD_DELETE, MF_ENABLED);
EnableMenuItem(hMenu, CMD_SAVE_AS, MF_ENABLED);
}
}
DrawMenuBar(Globals.hMainWnd);
}
static void UpdateDisplayMenu(void)
{
UINT uFormat;
WCHAR szFormatName[MAX_FMT_NAME_LEN + 1];
HMENU hMenu;
hMenu = GetSubMenu(Globals.hMenu, DISPLAY_MENU_POS);
while (GetMenuItemCount(hMenu) > 1)
{
DeleteMenu(hMenu, 1, MF_BYPOSITION);
}
if (CountClipboardFormats() == 0)
return;
if (!OpenClipboard(Globals.hMainWnd))
return;
AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
uFormat = EnumClipboardFormats(0);
while (uFormat)
{
RetrieveClipboardFormatName(Globals.hInstance, uFormat, TRUE, szFormatName, ARRAYSIZE(szFormatName));
if (!IsClipboardFormatSupported(uFormat))
{
AppendMenuW(hMenu, MF_STRING | MF_GRAYED, 0, szFormatName);
}
else
{
AppendMenuW(hMenu, MF_STRING, CMD_AUTOMATIC + uFormat, szFormatName);
}
uFormat = EnumClipboardFormats(uFormat);
}
CloseClipboard();
}
static int ClipboardCommandHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case CMD_OPEN:
{
LoadClipboardFromFile();
break;
}
case CMD_SAVE_AS:
{
SaveClipboardToFile();
break;
}
case CMD_EXIT:
{
PostMessageW(Globals.hMainWnd, WM_CLOSE, 0, 0);
break;
}
case CMD_DELETE:
{
if (MessageBoxRes(Globals.hMainWnd, Globals.hInstance,
STRING_DELETE_MSG, STRING_DELETE_TITLE,
MB_ICONWARNING | MB_YESNO) != IDYES)
{
break;
}
DeleteClipboardContent();
break;
}
case CMD_AUTOMATIC:
{
SetDisplayFormat(0);
break;
}
case CMD_HELP:
{
HtmlHelpW(Globals.hMainWnd, L"clipbrd.chm", 0, 0);
break;
}
case CMD_ABOUT:
{
WCHAR szTitle[MAX_STRING_LEN];
HICON hIcon;
hIcon = LoadIconW(Globals.hInstance, MAKEINTRESOURCE(CLIPBRD_ICON));
LoadStringW(Globals.hInstance, STRING_CLIPBOARD, szTitle, ARRAYSIZE(szTitle));
ShellAboutW(Globals.hMainWnd, szTitle, 0, hIcon);
DeleteObject(hIcon);
break;
}
default:
{
break;
}
}
return 0;
}
static void ClipboardPaintHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rc;
if (!OpenClipboard(Globals.hMainWnd))
return;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc);
switch (Globals.uDisplayFormat)
{
case CF_NONE:
{
break;
}
case CF_UNICODETEXT:
{
DrawTextFromClipboard(hdc, &rc, DT_LEFT | DT_NOPREFIX);
break;
}
case CF_BITMAP:
{
BitBltFromClipboard(hdc, rc.left, rc.top, rc.right, rc.bottom, 0, 0, SRCCOPY);
break;
}
case CF_DIB:
{
SetDIBitsToDeviceFromClipboard(CF_DIB, hdc, rc.left, rc.top, 0, 0, 0, DIB_RGB_COLORS);
break;
}
case CF_DIBV5:
{
SetDIBitsToDeviceFromClipboard(CF_DIBV5, hdc, rc.left, rc.top, 0, 0, 0, DIB_RGB_COLORS);
break;
}
case CF_METAFILEPICT:
{
PlayMetaFileFromClipboard(hdc, &rc);
break;
}
case CF_ENHMETAFILE:
{
PlayEnhMetaFileFromClipboard(hdc, &rc);
break;
}
default:
{
DrawTextFromResource(Globals.hInstance, ERROR_UNSUPPORTED_FORMAT, hdc, &rc, DT_CENTER | DT_WORDBREAK | DT_NOPREFIX);
break;
}
}
EndPaint(hWnd, &ps);
CloseClipboard();
}
static LRESULT WINAPI MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_CREATE:
{
Globals.hMenu = GetMenu(hWnd);
Globals.hWndNext = SetClipboardViewer(hWnd);
UpdateDisplayMenu();
SetDisplayFormat(0);
break;
}
case WM_CLOSE:
{
DestroyWindow(hWnd);
break;
}
case WM_DESTROY:
{
ChangeClipboardChain(hWnd, Globals.hWndNext);
PostQuitMessage(0);
break;
}
case WM_PAINT:
{
ClipboardPaintHandler(hWnd, uMsg, wParam, lParam);
break;
}
case WM_KEYDOWN:
{
HandleKeyboardScrollEvents(hWnd, uMsg, wParam, lParam);
break;
}
case WM_MOUSEWHEEL:
{
HandleMouseScrollEvents(hWnd, uMsg, wParam, lParam, &Scrollstate);
break;
}
case WM_HSCROLL:
{
HandleHorizontalScrollEvents(hWnd, uMsg, wParam, lParam, &Scrollstate);
break;
}
case WM_VSCROLL:
{
HandleVerticalScrollEvents(hWnd, uMsg, wParam, lParam, &Scrollstate);
break;
}
case WM_SIZE:
{
UpdateWindowScrollState(hWnd, Globals.hDspBmp, &Scrollstate);
if ((Globals.uDisplayFormat == CF_METAFILEPICT) ||
(Globals.uDisplayFormat == CF_ENHMETAFILE) ||
(Globals.uDisplayFormat == CF_DSPENHMETAFILE) ||
(Globals.uDisplayFormat == CF_DSPMETAFILEPICT))
{
InvalidateRect(Globals.hMainWnd, NULL, FALSE);
}
else if (!IsClipboardFormatSupported(Globals.uDisplayFormat))
{
InvalidateRect(Globals.hMainWnd, NULL, TRUE);
}
break;
}
case WM_CHANGECBCHAIN:
{
if ((HWND)wParam == Globals.hWndNext)
{
Globals.hWndNext = (HWND)lParam;
}
else if (Globals.hWndNext != NULL)
{
SendMessageW(Globals.hWndNext, uMsg, wParam, lParam);
}
break;
}
case WM_DRAWCLIPBOARD:
{
UpdateDisplayMenu();
SetDisplayFormat(0);
SendMessageW(Globals.hWndNext, uMsg, wParam, lParam);
break;
}
case WM_COMMAND:
{
if ((LOWORD(wParam) > CMD_AUTOMATIC))
{
SetDisplayFormat(LOWORD(wParam) - CMD_AUTOMATIC);
}
else
{
ClipboardCommandHandler(hWnd, uMsg, wParam, lParam);
}
break;
}
case WM_INITMENUPOPUP:
{
InitMenuPopup((HMENU)wParam, lParam);
break;
}
case WM_DROPFILES:
{
LoadClipboardFromDrop((HDROP)wParam);
break;
}
case WM_QUERYNEWPALETTE:
{
if (RealizeClipboardPalette(hWnd) != GDI_ERROR)
{
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
return TRUE;
}
return FALSE;
}
case WM_PALETTECHANGED:
{
if ((HWND)wParam != hWnd)
{
if (RealizeClipboardPalette(hWnd) != GDI_ERROR)
{
InvalidateRect(hWnd, NULL, TRUE);
UpdateWindow(hWnd);
}
}
break;
}
case WM_SYSCOLORCHANGE:
{
SetDisplayFormat(Globals.uDisplayFormat);
break;
}
case WM_SETTINGCHANGE:
{
if (wParam == SPI_SETWHEELSCROLLLINES)
{
UpdateLinesToScroll();
}
break;
}
default:
{
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
return 0;
}
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
MSG msg;
HACCEL hAccel;
HWND hPrevWindow;
WNDCLASSEXW wndclass;
WCHAR szBuffer[MAX_STRING_LEN];
hPrevWindow = FindWindowW(szClassName, NULL);
if (hPrevWindow)
{
BringWindowToFront(hPrevWindow);
return 0;
}
ZeroMemory(&Globals, sizeof(Globals));
Globals.hInstance = hInstance;
ZeroMemory(&wndclass, sizeof(wndclass));
wndclass.cbSize = sizeof(wndclass);
wndclass.lpfnWndProc = MainWndProc;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(CLIPBRD_ICON));
wndclass.hCursor = LoadCursorW(0, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndclass.lpszMenuName = MAKEINTRESOURCEW(MAIN_MENU);
wndclass.lpszClassName = szClassName;
if (!RegisterClassExW(&wndclass))
{
ShowLastWin32Error(NULL);
return 0;
}
LoadStringW(hInstance, STRING_CLIPBOARD, szBuffer, ARRAYSIZE(szBuffer));
Globals.hMainWnd = CreateWindowExW(WS_EX_CLIENTEDGE | WS_EX_ACCEPTFILES,
szClassName,
szBuffer,
WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
Globals.hInstance,
NULL);
if (!Globals.hMainWnd)
{
ShowLastWin32Error(NULL);
return 0;
}
ShowWindow(Globals.hMainWnd, nCmdShow);
UpdateWindow(Globals.hMainWnd);
hAccel = LoadAcceleratorsW(Globals.hInstance, MAKEINTRESOURCEW(ID_ACCEL));
if (!hAccel)
{
ShowLastWin32Error(Globals.hMainWnd);
}
/* If the user provided a path to a clipboard data file, try to open it */
if (lpCmdLine != NULL && *lpCmdLine)
LoadClipboardDataFromFile(lpCmdLine);
UpdateLinesToScroll();
while (GetMessageW(&msg, 0, 0, 0))
{
if (!TranslateAcceleratorW(Globals.hMainWnd, hAccel, &msg))
{
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
if (Globals.hDspBmp)
{
DeleteObject(Globals.hDspBmp);
}
return (int)msg.wParam;
}

View File

@@ -1,42 +0,0 @@
#include <windef.h>
#include <winuser.h>
#include "resources.h"
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Clipboard Viewer"
#define REACTOS_STR_INTERNAL_NAME "clipbrd"
#define REACTOS_STR_ORIGINAL_FILENAME "clipbrd.exe"
#include <reactos/version.rc>
CLIPBRD_ICON ICON "res/clipbrd.ico"
CLPFILE_ICON ICON "res/clpfile.ico"
#include <reactos/manifest_exe.rc>
/* UTF-8 */
#pragma code_page(65001)
#ifdef LANGUAGE_DE_DE
#include "lang/de-DE.rc"
#endif
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif
#ifdef LANGUAGE_ES_ES
#include "lang/es-ES.rc"
#endif
#ifdef LANGUAGE_FR_FR
#include "lang/fr-FR.rc"
#endif
#ifdef LANGUAGE_RO_RO
#include "lang/ro-RO.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,146 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/cliputils.c
* PURPOSE: Clipboard helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
#include "precomp.h"
static int
GetPredefinedClipboardFormatName(HINSTANCE hInstance,
UINT uFormat,
BOOL Unicode,
PVOID lpszFormat,
UINT cch)
{
static
struct FORMAT_NAME
{
UINT uFormat;
UINT uResID;
} uFormatList[] = {
/* Table sorted in increasing order of CF_xxx values, please keep it this way! */
{CF_TEXT , STRING_CF_TEXT }, // 1
{CF_BITMAP , STRING_CF_BITMAP }, // 2
{CF_METAFILEPICT, STRING_CF_METAFILEPICT}, // 3
{CF_SYLK , STRING_CF_SYLK }, // 4
{CF_DIF , STRING_CF_DIF }, // 5
{CF_TIFF , 0/*STRING_CF_TIFF*/ }, // 6
{CF_OEMTEXT , STRING_CF_OEMTEXT }, // 7
{CF_DIB , STRING_CF_DIB }, // 8
{CF_PALETTE , STRING_CF_PALETTE }, // 9
{CF_PENDATA , 0/*STRING_CF_PENDATA*/ }, // 10
{CF_RIFF , 0/*STRING_CF_RIFF*/ }, // 11
{CF_WAVE , 0/*STRING_CF_WAVE*/ }, // 12
{CF_UNICODETEXT , STRING_CF_UNICODETEXT }, // 13
{CF_ENHMETAFILE , STRING_CF_ENHMETAFILE }, // 14
#if(WINVER >= 0x0400)
{CF_HDROP , STRING_CF_HDROP }, // 15
{CF_LOCALE , STRING_CF_LOCALE }, // 16
#endif
#if(WINVER >= 0x0500)
{CF_DIBV5 , STRING_CF_DIBV5 }, // 17
#endif
};
switch (uFormat)
{
case CF_TEXT: case CF_BITMAP: case CF_METAFILEPICT:
case CF_SYLK: case CF_DIF: // case CF_TIFF:
case CF_OEMTEXT: case CF_DIB: case CF_PALETTE:
// case CF_PENDATA: // case CF_RIFF: // case CF_WAVE:
case CF_UNICODETEXT: case CF_ENHMETAFILE:
#if(WINVER >= 0x0400)
case CF_HDROP: case CF_LOCALE:
#endif
#if(WINVER >= 0x0500)
case CF_DIBV5:
#endif
{
if (Unicode)
return LoadStringW(hInstance, uFormatList[uFormat-1].uResID, (LPWSTR)lpszFormat, cch);
else
return LoadStringA(hInstance, uFormatList[uFormat-1].uResID, (LPSTR)lpszFormat, cch);
}
default:
{
return 0;
}
}
}
void
RetrieveClipboardFormatName(HINSTANCE hInstance,
UINT uFormat,
BOOL Unicode,
PVOID lpszFormat,
UINT cch)
{
if (!GetPredefinedClipboardFormatName(hInstance, uFormat, Unicode, lpszFormat, cch))
{
if (Unicode)
{
if (!GetClipboardFormatNameW(uFormat, (LPWSTR)lpszFormat, cch))
LoadStringW(hInstance, STRING_CF_UNKNOWN, (LPWSTR)lpszFormat, cch);
}
else
{
if (!GetClipboardFormatNameA(uFormat, (LPSTR)lpszFormat, cch))
LoadStringA(hInstance, STRING_CF_UNKNOWN, (LPSTR)lpszFormat, cch);
}
}
}
void DeleteClipboardContent(void)
{
if (!OpenClipboard(Globals.hMainWnd))
{
ShowLastWin32Error(Globals.hMainWnd);
return;
}
if (!EmptyClipboard())
{
ShowLastWin32Error(Globals.hMainWnd);
}
CloseClipboard();
}
UINT GetAutomaticClipboardFormat(void)
{
static UINT uFormatList[] = {
CF_UNICODETEXT,
CF_ENHMETAFILE,
CF_METAFILEPICT,
CF_DIBV5,
CF_DIB,
CF_BITMAP
};
return GetPriorityClipboardFormat(uFormatList, ARRAYSIZE(uFormatList));
}
BOOL IsClipboardFormatSupported(UINT uFormat)
{
switch (uFormat)
{
case CF_UNICODETEXT:
case CF_BITMAP:
case CF_ENHMETAFILE:
case CF_METAFILEPICT:
case CF_DIB:
case CF_DIBV5:
{
return TRUE;
}
default:
{
return FALSE;
}
}
}

View File

@@ -1,18 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/cliputils.h
* PURPOSE: Clipboard helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
void
RetrieveClipboardFormatName(HINSTANCE hInstance,
UINT uFormat,
BOOL Unicode,
PVOID lpszFormat,
UINT cch);
void DeleteClipboardContent(void);
UINT GetAutomaticClipboardFormat(void);
BOOL IsClipboardFormatSupported(UINT uFormat);

View File

@@ -1,592 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/fileutils.c
* PURPOSE: Clipboard file format helper functions.
* PROGRAMMERS: Ricardo Hanke
* Hermes Belusca-Maito
*/
#include "precomp.h"
static HGLOBAL ClipboardReadMemoryBlock(HANDLE hFile, DWORD dwOffset, DWORD dwLength)
{
HGLOBAL hData;
LPVOID lpData;
DWORD dwBytesRead;
hData = GlobalAlloc(GHND, dwLength);
if (!hData)
return NULL;
lpData = GlobalLock(hData);
if (!lpData)
{
GlobalFree(hData);
return NULL;
}
if (SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
{
GlobalUnlock(hData);
GlobalFree(hData);
return NULL;
}
if (!ReadFile(hFile, lpData, dwLength, &dwBytesRead, NULL))
{
GlobalUnlock(hData);
GlobalFree(hData);
return NULL;
}
GlobalUnlock(hData);
return hData;
}
static BOOL ClipboardReadMemory(HANDLE hFile, DWORD dwFormat, DWORD dwOffset, DWORD dwLength, WORD FileIdentifier, PVOID lpFormatName)
{
HGLOBAL hData;
DWORD dwTemp = 0;
hData = ClipboardReadMemoryBlock(hFile, dwOffset, dwLength);
if (!hData)
return FALSE;
if ((dwFormat >= 0xC000) && (dwFormat <= 0xFFFF))
{
if (FileIdentifier == CLIP_FMT_31)
dwTemp = RegisterClipboardFormatA((LPCSTR)lpFormatName);
else if ((FileIdentifier == CLIP_FMT_NT) || (FileIdentifier == CLIP_FMT_BK))
dwTemp = RegisterClipboardFormatW((LPCWSTR)lpFormatName);
if (!dwTemp)
{
GlobalFree(hData);
return FALSE;
}
}
else
{
dwTemp = dwFormat;
}
if (!SetClipboardData(dwTemp, hData))
{
GlobalFree(hData);
return FALSE;
}
return TRUE;
}
static BOOL ClipboardWriteMemory(HANDLE hFile, DWORD dwFormat, DWORD dwOffset, PDWORD pdwLength)
{
HGLOBAL hData;
LPVOID lpData;
DWORD dwBytesWritten;
hData = GetClipboardData(dwFormat);
if (!hData)
return FALSE;
lpData = GlobalLock(hData);
if (!lpData)
return FALSE;
*pdwLength = GlobalSize(hData);
if (SetFilePointer(hFile, dwOffset, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
{
GlobalUnlock(hData);
return FALSE;
}
if (!WriteFile(hFile, lpData, *pdwLength, &dwBytesWritten, NULL))
{
GlobalUnlock(hData);
return FALSE;
}
GlobalUnlock(hData);
return TRUE;
}
static BOOL ClipboardReadPalette(HANDLE hFile, DWORD dwOffset, DWORD dwLength)
{
LPLOGPALETTE lpPalette;
HPALETTE hPalette;
HGLOBAL hData;
hData = ClipboardReadMemoryBlock(hFile, dwOffset, dwLength);
if (!hData)
{
return FALSE;
}
lpPalette = GlobalLock(hData);
if (!lpPalette)
{
GlobalFree(hData);
return FALSE;
}
hPalette = CreatePalette(lpPalette);
if (!hPalette)
{
GlobalUnlock(hData);
GlobalFree(hData);
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
GlobalUnlock(hData);
GlobalFree(hData);
if (!SetClipboardData(CF_PALETTE, hPalette))
{
DeleteObject(hPalette);
return FALSE;
}
return TRUE;
}
static BOOL ClipboardReadMetafile(HANDLE hFile, DWORD dwOffset, DWORD dwLength)
{
HMETAFILE hMf;
HGLOBAL hData;
LPVOID lpData;
hData = ClipboardReadMemoryBlock(hFile, dwOffset, dwLength);
if (!hData)
{
return FALSE;
}
lpData = GlobalLock(hData);
if (!lpData)
{
GlobalFree(hData);
return FALSE;
}
hMf = SetMetaFileBitsEx(dwLength, lpData);
GlobalUnlock(hData);
GlobalFree(hData);
if (!hMf)
{
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
if (!SetClipboardData(CF_METAFILEPICT, hMf))
{
DeleteMetaFile(hMf);
return FALSE;
}
return TRUE;
}
static BOOL ClipboardReadEnhMetafile(HANDLE hFile, DWORD dwOffset, DWORD dwLength)
{
HENHMETAFILE hEmf;
HGLOBAL hData;
LPVOID lpData;
hData = ClipboardReadMemoryBlock(hFile, dwOffset, dwLength);
if (!hData)
{
return FALSE;
}
lpData = GlobalLock(hData);
if (!lpData)
{
GlobalFree(hData);
return FALSE;
}
hEmf = SetEnhMetaFileBits(dwLength, lpData);
GlobalUnlock(hData);
GlobalFree(hData);
if (!hEmf)
{
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
if (!SetClipboardData(CF_ENHMETAFILE, hEmf))
{
DeleteEnhMetaFile(hEmf);
return FALSE;
}
return TRUE;
}
static BOOL ClipboardReadBitmap(HANDLE hFile, DWORD dwOffset, DWORD dwLength)
{
HGLOBAL hData;
HBITMAP hBitmap;
LPBITMAP lpBitmap;
hData = ClipboardReadMemoryBlock(hFile, dwOffset, dwLength);
if (!hData)
{
return FALSE;
}
lpBitmap = GlobalLock(hData);
if (!lpBitmap)
{
GlobalFree(hData);
return FALSE;
}
lpBitmap->bmBits = lpBitmap + sizeof(BITMAP) + 1;
hBitmap = CreateBitmapIndirect(lpBitmap);
GlobalUnlock(hData);
GlobalFree(hData);
if (!hBitmap)
{
SetLastError(ERROR_OUTOFMEMORY);
return FALSE;
}
if (!SetClipboardData(CF_BITMAP, hBitmap))
{
DeleteObject(hBitmap);
return FALSE;
}
return TRUE;
}
void ReadClipboardFile(LPCWSTR lpFileName)
{
CLIPFILEHEADER ClipFileHeader;
CLIPFORMATHEADER ClipFormatArray;
NTCLIPFILEHEADER NtClipFileHeader;
NTCLIPFORMATHEADER NtClipFormatArray;
PVOID pClipFileHeader;
PVOID pClipFormatArray;
DWORD SizeOfFileHeader, SizeOfFormatHeader;
WORD wFileIdentifier;
WORD wFormatCount;
DWORD dwFormatID;
DWORD dwLenData;
DWORD dwOffData;
PVOID szName;
HANDLE hFile;
DWORD dwBytesRead;
BOOL bResult;
int i;
/* Open the file for read access */
hFile = CreateFileW(lpFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Just read enough bytes to get the clipboard file format ID */
if (!ReadFile(hFile, &wFileIdentifier, sizeof(wFileIdentifier), &dwBytesRead, NULL))
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Set data according to the clipboard file format ID */
switch (wFileIdentifier)
{
case CLIP_FMT_31:
SizeOfFileHeader = sizeof(CLIPFILEHEADER);
SizeOfFormatHeader = sizeof(CLIPFORMATHEADER);
pClipFileHeader = &ClipFileHeader;
pClipFormatArray = &ClipFormatArray;
break;
case CLIP_FMT_NT:
case CLIP_FMT_BK:
SizeOfFileHeader = sizeof(NTCLIPFILEHEADER);
SizeOfFormatHeader = sizeof(NTCLIPFORMATHEADER);
pClipFileHeader = &NtClipFileHeader;
pClipFormatArray = &NtClipFormatArray;
break;
default:
MessageBoxRes(Globals.hMainWnd, Globals.hInstance, ERROR_INVALID_FILE_FORMAT, 0, MB_ICONSTOP | MB_OK);
goto done;
}
/* Completely read the header */
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
if (!ReadFile(hFile, pClipFileHeader, SizeOfFileHeader, &dwBytesRead, NULL) ||
dwBytesRead != SizeOfFileHeader)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Get header data */
switch (wFileIdentifier)
{
case CLIP_FMT_31:
assert(wFileIdentifier == ((CLIPFILEHEADER*)pClipFileHeader)->wFileIdentifier);
wFormatCount = ((CLIPFILEHEADER*)pClipFileHeader)->wFormatCount;
break;
case CLIP_FMT_NT:
case CLIP_FMT_BK:
assert(wFileIdentifier == ((NTCLIPFILEHEADER*)pClipFileHeader)->wFileIdentifier);
wFormatCount = ((NTCLIPFILEHEADER*)pClipFileHeader)->wFormatCount;
break;
}
/* Loop through the format data array */
for (i = 0; i < wFormatCount; i++)
{
if (SetFilePointer(hFile, SizeOfFileHeader + i * SizeOfFormatHeader, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
if (!ReadFile(hFile, pClipFormatArray, SizeOfFormatHeader, &dwBytesRead, NULL))
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Get format data */
switch (wFileIdentifier)
{
case CLIP_FMT_31:
dwFormatID = ((CLIPFORMATHEADER*)pClipFormatArray)->dwFormatID;
dwLenData = ((CLIPFORMATHEADER*)pClipFormatArray)->dwLenData;
dwOffData = ((CLIPFORMATHEADER*)pClipFormatArray)->dwOffData;
szName = ((CLIPFORMATHEADER*)pClipFormatArray)->szName;
break;
case CLIP_FMT_NT:
case CLIP_FMT_BK:
dwFormatID = ((NTCLIPFORMATHEADER*)pClipFormatArray)->dwFormatID;
dwLenData = ((NTCLIPFORMATHEADER*)pClipFormatArray)->dwLenData;
dwOffData = ((NTCLIPFORMATHEADER*)pClipFormatArray)->dwOffData;
szName = ((NTCLIPFORMATHEADER*)pClipFormatArray)->szName;
break;
}
switch (dwFormatID)
{
case CF_OWNERDISPLAY:
{
break;
}
case CF_BITMAP:
case CF_DSPBITMAP:
{
bResult = ClipboardReadBitmap(hFile, dwOffData, dwLenData);
break;
}
case CF_METAFILEPICT:
case CF_DSPMETAFILEPICT:
{
bResult = ClipboardReadMetafile(hFile, dwOffData, dwLenData);
break;
}
case CF_ENHMETAFILE:
case CF_DSPENHMETAFILE:
{
bResult = ClipboardReadEnhMetafile(hFile, dwOffData, dwLenData);
break;
}
case CF_PALETTE:
{
bResult = ClipboardReadPalette(hFile, dwOffData, dwLenData);
break;
}
default:
{
if ((dwFormatID < CF_PRIVATEFIRST) || (dwFormatID > CF_PRIVATELAST))
{
bResult = ClipboardReadMemory(hFile, dwFormatID, dwOffData, dwLenData, wFileIdentifier, szName);
}
break;
}
}
if (!bResult)
ShowLastWin32Error(Globals.hMainWnd);
}
done:
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle(hFile);
return;
}
void WriteClipboardFile(LPCWSTR lpFileName, WORD wFileIdentifier)
{
CLIPFILEHEADER ClipFileHeader;
CLIPFORMATHEADER ClipFormatArray;
NTCLIPFILEHEADER NtClipFileHeader;
NTCLIPFORMATHEADER NtClipFormatArray;
PVOID pClipFileHeader;
PVOID pClipFormatArray;
DWORD SizeOfFileHeader, SizeOfFormatHeader;
WORD wFormatCount;
DWORD dwFormatID;
DWORD dwLenData;
DWORD dwOffData;
// PVOID szName;
HANDLE hFile;
DWORD dwBytesWritten;
int i;
/* Create the file for write access */
hFile = CreateFileW(lpFileName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
wFormatCount = CountClipboardFormats();
/* Select the file format and setup the header according to the clipboard file format ID */
switch (wFileIdentifier)
{
case CLIP_FMT_31:
SizeOfFileHeader = sizeof(CLIPFILEHEADER);
SizeOfFormatHeader = sizeof(CLIPFORMATHEADER);
pClipFileHeader = &ClipFileHeader;
pClipFormatArray = &ClipFormatArray;
ClipFileHeader.wFileIdentifier = CLIP_FMT_31; // wFileIdentifier
ClipFileHeader.wFormatCount = wFormatCount;
break;
case CLIP_FMT_NT:
case CLIP_FMT_BK:
SizeOfFileHeader = sizeof(NTCLIPFILEHEADER);
SizeOfFormatHeader = sizeof(NTCLIPFORMATHEADER);
pClipFileHeader = &NtClipFileHeader;
pClipFormatArray = &NtClipFormatArray;
NtClipFileHeader.wFileIdentifier = CLIP_FMT_NT; // wFileIdentifier
NtClipFileHeader.wFormatCount = wFormatCount;
break;
default:
MessageBoxRes(Globals.hMainWnd, Globals.hInstance, ERROR_INVALID_FILE_FORMAT, 0, MB_ICONSTOP | MB_OK);
goto done;
}
/* Write the header */
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
if (!WriteFile(hFile, pClipFileHeader, SizeOfFileHeader, &dwBytesWritten, NULL) ||
dwBytesWritten != SizeOfFileHeader)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Compute where the data should start (after the file header and the format array) */
dwOffData = SizeOfFileHeader + wFormatCount * SizeOfFormatHeader;
/* Loop through each format and save the data */
i = 0;
dwFormatID = EnumClipboardFormats(0);
while (dwFormatID)
{
if (i >= wFormatCount)
{
/* Must never happen! */
assert(FALSE);
break;
}
/* Write the clipboard data at the specified offset, and retrieve its length */
if (!ClipboardWriteMemory(hFile, dwFormatID, dwOffData, &dwLenData))
goto Cont;
/* Write the format data header */
switch (wFileIdentifier)
{
case CLIP_FMT_31:
ZeroMemory(pClipFormatArray, sizeof(CLIPFORMATHEADER));
((CLIPFORMATHEADER*)pClipFormatArray)->dwFormatID = dwFormatID;
((CLIPFORMATHEADER*)pClipFormatArray)->dwLenData = dwLenData;
((CLIPFORMATHEADER*)pClipFormatArray)->dwOffData = dwOffData;
RetrieveClipboardFormatName(Globals.hInstance,
dwFormatID,
FALSE,
((CLIPFORMATHEADER*)pClipFormatArray)->szName,
ARRAYSIZE(((CLIPFORMATHEADER*)pClipFormatArray)->szName));
break;
case CLIP_FMT_NT:
case CLIP_FMT_BK:
ZeroMemory(pClipFormatArray, sizeof(NTCLIPFORMATHEADER));
((NTCLIPFORMATHEADER*)pClipFormatArray)->dwFormatID = dwFormatID;
((NTCLIPFORMATHEADER*)pClipFormatArray)->dwLenData = dwLenData;
((NTCLIPFORMATHEADER*)pClipFormatArray)->dwOffData = dwOffData;
RetrieveClipboardFormatName(Globals.hInstance,
dwFormatID,
TRUE,
((NTCLIPFORMATHEADER*)pClipFormatArray)->szName,
ARRAYSIZE(((NTCLIPFORMATHEADER*)pClipFormatArray)->szName));
break;
}
if (SetFilePointer(hFile, SizeOfFileHeader + i * SizeOfFormatHeader, NULL, FILE_BEGIN) == INVALID_SET_FILE_POINTER)
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
if (!WriteFile(hFile, pClipFormatArray, SizeOfFormatHeader, &dwBytesWritten, NULL))
{
ShowLastWin32Error(Globals.hMainWnd);
goto done;
}
/* Adjust the offset for the next data stream */
dwOffData += dwLenData;
Cont:
i++;
dwFormatID = EnumClipboardFormats(dwFormatID);
}
done:
if (hFile != INVALID_HANDLE_VALUE)
CloseHandle(hFile);
return;
}

View File

@@ -1,52 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/fileutils.h
* PURPOSE: Clipboard file format helper functions.
* PROGRAMMERS: Ricardo Hanke
* Hermes Belusca-Maito
*/
#define CLIP_FMT_31 0xC350
#define CLIP_FMT_NT 0xC351
#define CLIP_FMT_BK 0xC352
#define MAX_FMT_NAME_LEN 79
/*
* Win3.1 Clipboard File Format (default)
*/
#pragma pack(push, 1)
typedef struct _CLIPFILEHEADER
{
WORD wFileIdentifier;
WORD wFormatCount;
} CLIPFILEHEADER;
typedef struct _CLIPFORMATHEADER
{
WORD dwFormatID;
DWORD dwLenData;
DWORD dwOffData;
CHAR szName[MAX_FMT_NAME_LEN];
} CLIPFORMATHEADER;
#pragma pack(pop)
/*
* NT Clipboard File Format
*/
typedef struct _NTCLIPFILEHEADER
{
WORD wFileIdentifier;
WORD wFormatCount;
} NTCLIPFILEHEADER;
typedef struct _NTCLIPFORMATHEADER
{
DWORD dwFormatID;
DWORD dwLenData;
DWORD dwOffData;
WCHAR szName[MAX_FMT_NAME_LEN];
} NTCLIPFORMATHEADER;
void ReadClipboardFile(LPCWSTR lpFileName);
void WriteClipboardFile(LPCWSTR lpFileName, WORD wFileIdentifier);

View File

@@ -1,65 +0,0 @@
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&Datei"
BEGIN
MENUITEM "Ö&ffnen...", CMD_OPEN
MENUITEM "Speichern &unter...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Beenden", CMD_EXIT
END
POPUP "&Bearbeiten"
BEGIN
MENUITEM "&Löschen\tEntf", CMD_DELETE
END
POPUP "&Anzeige"
BEGIN
MENUITEM "&Automatisch", CMD_AUTOMATIC
END
POPUP "&Hilfe"
BEGIN
MENUITEM "&Hilfethemen", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "Inf&o", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Clipboard Viewer"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Soll der Inhalt der Zwischenablage gelöscht werden?"
STRING_DELETE_TITLE "Zwischenablage löschen"
STRING_FORMAT_NT "Zwischenablagedateien für ReactOS (*.clp)"
STRING_FORMAT_GEN "Zwischenablagedateien (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Unbekanntes Format"
STRING_CF_TEXT "Text"
STRING_CF_BITMAP "Bitmap"
STRING_CF_OEMTEXT "OEM-Text"
STRING_CF_UNICODETEXT "Unicodetext"
STRING_CF_DIB "DIB-Bitmap"
STRING_CF_LOCALE "Gebietsschema"
STRING_CF_ENHMETAFILE "Erweiterte Metadatei"
STRING_CF_METAFILEPICT "Metadatei"
STRING_CF_PALETTE "Farbpalette"
STRING_CF_DIBV5 "DIB-Bitmap (Version 5)"
STRING_CF_SYLK "Symbolic Link Format"
STRING_CF_DIF "Data Interchange Format"
STRING_CF_HDROP "Drop-Daten"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "Die Daten in der Zwischenablage liegen in einem Format vor, welches nicht angezeigt werden kann."
ERROR_INVALID_FILE_FORMAT "Die ausgewählte Datei ist keine gültige Zwischenablagedatei."
END

View File

@@ -1,65 +0,0 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Open...", CMD_OPEN
MENUITEM "Save &as...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "E&xit", CMD_EXIT
END
POPUP "&Edit"
BEGIN
MENUITEM "&Delete\tDel", CMD_DELETE
END
POPUP "&Display"
BEGIN
MENUITEM "&Automatic", CMD_AUTOMATIC
END
POPUP "&Help"
BEGIN
MENUITEM "&Help Topics", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "&About", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Clipboard Viewer"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Clear contents of the Clipboard?"
STRING_DELETE_TITLE "Clear Clipboard"
STRING_FORMAT_NT "Clipboard files for ReactOS (*.clp)"
STRING_FORMAT_GEN "Clipboard files (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Unknown Format"
STRING_CF_TEXT "Text"
STRING_CF_BITMAP "Bitmap"
STRING_CF_OEMTEXT "OEM Text"
STRING_CF_UNICODETEXT "Unicode Text"
STRING_CF_DIB "DIB Bitmap"
STRING_CF_LOCALE "Locale Data"
STRING_CF_ENHMETAFILE "Enhanced Metafile"
STRING_CF_METAFILEPICT "Metafile"
STRING_CF_PALETTE "Color Palette"
STRING_CF_DIBV5 "DIB Bitmap (Version 5)"
STRING_CF_SYLK "Symbolic Link Format"
STRING_CF_DIF "Data Interchange Format"
STRING_CF_HDROP "Drop Data"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "The Clipboard contains data in a format, that cannot be displayed."
ERROR_INVALID_FILE_FORMAT "The selected file is not a valid clipboard file."
END

View File

@@ -1,67 +0,0 @@
/* Spanish translation by Ismael Ferreras Morezuelas (Swyter) */
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&Archivo"
BEGIN
MENUITEM "&Abrir...", CMD_OPEN
MENUITEM "Guardar &como...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "S&alir", CMD_EXIT
END
POPUP "&Edición"
BEGIN
MENUITEM "&Borrar\tDel", CMD_DELETE
END
POPUP "&Visualización"
BEGIN
MENUITEM "&Automática", CMD_AUTOMATIC
END
POPUP "A&yuda"
BEGIN
MENUITEM "&Temas de ayuda", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "&Acerca de", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Clipboard Viewer"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "¿Borrar contenidos del Portapapeles?"
STRING_DELETE_TITLE "Vaciar Portapapeles"
STRING_FORMAT_NT "Archivos de Portapapeles de ReactOS (*.clp)"
STRING_FORMAT_GEN "Archivos de Portapapeles (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Formato desconocido"
STRING_CF_TEXT "Texto"
STRING_CF_BITMAP "Mapa de bits"
STRING_CF_OEMTEXT "Texto OEM"
STRING_CF_UNICODETEXT "Texto Unicode"
STRING_CF_DIB "Mapa de bits DIB"
STRING_CF_LOCALE "Dato de idiomas"
STRING_CF_ENHMETAFILE "Metarchivo mejorado"
STRING_CF_METAFILEPICT "Metarchivo"
STRING_CF_PALETTE "Paleta de color"
STRING_CF_DIBV5 "Mapa de bits DIB (versión 5)"
STRING_CF_SYLK "Formato de enlace simbólico"
STRING_CF_DIF "Formato de intercambio de datos"
STRING_CF_HDROP "Datos de arrastrar y soltar"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "El Portapapeles contiene datos en un formato que no es posible mostrar."
ERROR_INVALID_FILE_FORMAT "El archivo seleccionado no es un archivo del Portapapeles válido."
END

View File

@@ -1,65 +0,0 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&Fichier"
BEGIN
MENUITEM "&Ouvrir...", CMD_OPEN
MENUITEM "&Enregistrer sous...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Quitter", CMD_EXIT
END
POPUP "&Edition"
BEGIN
MENUITEM "&Supprimer\tSuppr", CMD_DELETE
END
POPUP "Affic&hage"
BEGIN
MENUITEM "&Automatique", CMD_AUTOMATIC
END
POPUP "&Aide"
BEGIN
MENUITEM "&Rubriques d'aide", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "&À propos...", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Visionneuse du Presse-papiers"
STRING_CLIPFILE "Élément du Presse-papiers"
STRING_DELETE_MSG "Voulez-vous effacer le contenu du Presse-papiers ?"
STRING_DELETE_TITLE "Effacer le Presse-papiers"
STRING_FORMAT_NT "Fichiers du Presse-papiers ReactOS (*.clp)"
STRING_FORMAT_GEN "Fichiers du Presse-papiers (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Format inconnu"
STRING_CF_TEXT "Texte"
STRING_CF_BITMAP "Bitmap"
STRING_CF_OEMTEXT "Texte OEM"
STRING_CF_UNICODETEXT "Texte Unicode"
STRING_CF_DIB "DIB Bitmap"
STRING_CF_LOCALE "Locale Data"
STRING_CF_ENHMETAFILE "Enhanced Metafile"
STRING_CF_METAFILEPICT "Metafile"
STRING_CF_PALETTE "Color Palette"
STRING_CF_DIBV5 "DIB Bitmap (Version 5)"
STRING_CF_SYLK "Symbolic Link Format"
STRING_CF_DIF "Data Interchange Format"
STRING_CF_HDROP "Drop Data"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "Le Presse-papiers contient des données dans un format qui ne peut être affiché."
ERROR_INVALID_FILE_FORMAT "Le fichier sélectionné n'est pas un fichier valide du presse-papiers."
END

View File

@@ -1,66 +0,0 @@
/* Ștefan Fulea (stefan dot fulea at mail dot md) */
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&Fișier"
BEGIN
MENUITEM "&Deschidere…", CMD_OPEN
MENUITEM "Păst&rare ca…", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "I&eșire", CMD_EXIT
END
POPUP "&Editare"
BEGIN
MENUITEM "Șt&erge\tDel", CMD_DELETE
END
POPUP "&Afișare"
BEGIN
MENUITEM "&Automată", CMD_AUTOMATIC
END
POPUP "Aj&utor"
BEGIN
MENUITEM "&Manual…", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "&Despre…", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Clipboard Viewer"
STRING_CLIPFILE "Clipboard Element"
STRING_DELETE_MSG "Elimină conținutul din Clipboard?"
STRING_DELETE_TITLE "Curăță Clipboard"
STRING_FORMAT_NT "Fișiere clipboard pentru ReactOS (*.clp)"
STRING_FORMAT_GEN "Fișiere clipboard (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Format nespecificat"
STRING_CF_TEXT "Text"
STRING_CF_BITMAP "Bitmap"
STRING_CF_OEMTEXT "Text OEM"
STRING_CF_UNICODETEXT "Text unicode"
STRING_CF_DIB "Bitmap DIB"
STRING_CF_LOCALE "Date locale"
STRING_CF_ENHMETAFILE "Metafișier îmbunătățit"
STRING_CF_METAFILEPICT "Metafișier"
STRING_CF_PALETTE "Paletă de culori"
STRING_CF_DIBV5 "Bitmap DIB (versiune 5)"
STRING_CF_SYLK "Format de legătură simbolică"
STRING_CF_DIF "Format de transfer al datelor"
STRING_CF_HDROP "Abandon date"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "În clipboard sunt date într-un format care nu poate fi afișat."
ERROR_INVALID_FILE_FORMAT "Fișierul selectat nu e un fișier clipboard valid."
END

View File

@@ -1,67 +0,0 @@
/* TRANSLATOR: 2015, 2016 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "&Kütük"
BEGIN
MENUITEM "&Aç...", CMD_OPEN
MENUITEM "A&yrı Sakla...", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "&Çıkış", CMD_EXIT
END
POPUP "&Düzen"
BEGIN
MENUITEM "&Sil\tDel", CMD_DELETE
END
POPUP "&Görüntü"
BEGIN
MENUITEM "&Kendiliğinden", CMD_AUTOMATIC
END
POPUP "&Yardım"
BEGIN
MENUITEM "&Yardım Konuları", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "&Üzerine", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "Pano Görüntüleyicisi"
STRING_CLIPFILE "Pano Öğesi"
STRING_DELETE_MSG "Pano içeriğini sil?"
STRING_DELETE_TITLE "Pano Sil"
STRING_FORMAT_NT "ReactOS İçin Pano Kütükleri (*.clp)"
STRING_FORMAT_GEN "Pano Kütükleri (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "Bilinmeyen Biçim"
STRING_CF_TEXT "Metin"
STRING_CF_BITMAP "Bit Eşlem"
STRING_CF_OEMTEXT "OEM Metin"
STRING_CF_UNICODETEXT "Evrenlik Kodlu Metin"
STRING_CF_DIB "DIB Bit Eşlem"
STRING_CF_LOCALE "Yerli Veri"
STRING_CF_ENHMETAFILE "Geliştirilmiş Metafile"
STRING_CF_METAFILEPICT "Metafile"
STRING_CF_PALETTE "Renklik"
STRING_CF_DIBV5 "DIB Bit Eşlem (Sürüm 5)"
STRING_CF_SYLK "Simgelik Bağlantı Biçimi"
STRING_CF_DIF "Veri Değiş Tokuş Biçimi"
STRING_CF_HDROP "Bırakma Verisi"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "Pano görüntülenemeyen bir biçimdeki veri içeriyor."
ERROR_INVALID_FILE_FORMAT "Seçili kütük geçerli bir pano kütüğü değil."
END

View File

@@ -1,67 +0,0 @@
/* Simplified Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "文件(&F)"
BEGIN
MENUITEM "打开...(&O)", CMD_OPEN
MENUITEM "另存为...(&A)", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "退出(&X)", CMD_EXIT
END
POPUP "编辑(&E)"
BEGIN
MENUITEM "删除(&D)\tDel", CMD_DELETE
END
POPUP "显示(&D)"
BEGIN
MENUITEM "自动(&A)", CMD_AUTOMATIC
END
POPUP "帮助(&H)"
BEGIN
MENUITEM "帮助主题(&H)", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "关于(&A)", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "剪贴板查看程序"
STRING_CLIPFILE "剪贴板上的元素"
STRING_DELETE_MSG "清除剪贴板的内容吗?"
STRING_DELETE_TITLE "清除剪贴板"
STRING_FORMAT_NT "ReactOS 的剪贴板文件 (*.clp)"
STRING_FORMAT_GEN "剪贴板文件 (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "未知的格式"
STRING_CF_TEXT "文本"
STRING_CF_BITMAP "位图"
STRING_CF_OEMTEXT "OEM 文本"
STRING_CF_UNICODETEXT "Unicode 文本"
STRING_CF_DIB "DIB 位图"
STRING_CF_LOCALE "本地日期"
STRING_CF_ENHMETAFILE "增强型图元文件"
STRING_CF_METAFILEPICT "图元文件"
STRING_CF_PALETTE "调色板"
STRING_CF_DIBV5 "DIB 位图 (第 5 版)"
STRING_CF_SYLK "符号链接格式"
STRING_CF_DIF "数据交换格式"
STRING_CF_HDROP "删除数据"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "剪贴板中包含格式,不能显示的数据。"
ERROR_INVALID_FILE_FORMAT "所选的文件不是一个有效的剪贴板文件。"
END

View File

@@ -1,67 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
ID_ACCEL ACCELERATORS
BEGIN
VK_DELETE, CMD_DELETE, VIRTKEY
END
MAIN_MENU MENU
BEGIN
POPUP "檔案(&F)"
BEGIN
MENUITEM "開啟...(&O)", CMD_OPEN
MENUITEM "另存為...(&A)", CMD_SAVE_AS
MENUITEM SEPARATOR
MENUITEM "退出(&X)", CMD_EXIT
END
POPUP "編輯(&E)"
BEGIN
MENUITEM "刪除(&D)\tDel", CMD_DELETE
END
POPUP "顯示(&D)"
BEGIN
MENUITEM "自動(&A)", CMD_AUTOMATIC
END
POPUP "幫助(&H)"
BEGIN
MENUITEM "幫助主題(&H)", CMD_HELP
MENUITEM SEPARATOR
MENUITEM "關於(&A)", CMD_ABOUT
END
END
STRINGTABLE
BEGIN
STRING_CLIPBOARD "剪貼簿查看程式"
STRING_CLIPFILE "剪貼簿上的元素"
STRING_DELETE_MSG "清除剪貼簿的內容嗎?"
STRING_DELETE_TITLE "清除剪貼簿"
STRING_FORMAT_NT "ReactOS 的剪貼簿檔案 (*.clp)"
STRING_FORMAT_GEN "剪貼簿檔案 (*.clp)"
END
STRINGTABLE
BEGIN
STRING_CF_UNKNOWN "未知的格式"
STRING_CF_TEXT "文字"
STRING_CF_BITMAP "點陣圖"
STRING_CF_OEMTEXT "OEM 文字"
STRING_CF_UNICODETEXT "Unicode 文字"
STRING_CF_DIB "DIB 點陣圖"
STRING_CF_LOCALE "本地日期"
STRING_CF_ENHMETAFILE "增強型圖元檔案"
STRING_CF_METAFILEPICT "圖元檔案"
STRING_CF_PALETTE "調色盤"
STRING_CF_DIBV5 "DIB 點陣圖 (第 5 版)"
STRING_CF_SYLK "符號連結格式"
STRING_CF_DIF "資料交換格式"
STRING_CF_HDROP "刪除資料"
END
STRINGTABLE
BEGIN
ERROR_UNSUPPORTED_FORMAT "剪貼簿中包含格式,不能顯示的資料。"
ERROR_INVALID_FILE_FORMAT "所選的檔案不是一個有效的剪貼簿檔案。"
END

View File

@@ -1,42 +0,0 @@
#ifndef _CLIPBRD_PCH_
#define _CLIPBRD_PCH_
// #pragma once
#include <limits.h>
#include <assert.h>
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
#include <wingdi.h>
#include <shellapi.h>
#include <htmlhelp.h>
#include <commdlg.h>
#include "resources.h"
#include "cliputils.h"
#include "fileutils.h"
#include "winutils.h"
#include "scrollutils.h"
#define MAX_STRING_LEN 255
#define DISPLAY_MENU_POS 2
#define CF_NONE 0
typedef struct _CLIPBOARD_GLOBALS
{
HINSTANCE hInstance;
HWND hMainWnd;
HWND hWndNext;
HMENU hMenu;
UINT uDisplayFormat;
UINT uCheckedItem;
UINT uLinesToScroll;
HBITMAP hDspBmp;
} CLIPBOARD_GLOBALS;
extern CLIPBOARD_GLOBALS Globals;
#endif /* _CLIPBRD_PCH_ */

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -1,40 +0,0 @@
#pragma once
#define CLIPBRD_ICON 100
#define CLPFILE_ICON 101
#define MAIN_MENU 102
#define ID_ACCEL 103
#define CMD_OPEN 110
#define CMD_SAVE_AS 111
#define CMD_EXIT 112
#define CMD_DELETE 113
#define CMD_HELP 115
#define CMD_ABOUT 116
#define CMD_AUTOMATIC 1000
#define STRING_CLIPBOARD 120
#define STRING_CLIPFILE 121
#define STRING_DELETE_MSG 123
#define STRING_DELETE_TITLE 124
#define STRING_FORMAT_NT 125
#define STRING_FORMAT_GEN 126
#define STRING_CF_UNKNOWN 200
#define STRING_CF_TEXT 201
#define STRING_CF_BITMAP 202
#define STRING_CF_METAFILEPICT 203
#define STRING_CF_SYLK 204
#define STRING_CF_DIF 205
#define STRING_CF_OEMTEXT 207
#define STRING_CF_DIB 208
#define STRING_CF_PALETTE 209
#define STRING_CF_UNICODETEXT 213
#define STRING_CF_ENHMETAFILE 214
#define STRING_CF_HDROP 215
#define STRING_CF_LOCALE 216
#define STRING_CF_DIBV5 217
#define ERROR_UNSUPPORTED_FORMAT 300
#define ERROR_INVALID_FILE_FORMAT 301

View File

@@ -1,314 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/scrollutils.c
* PURPOSE: Scrolling releated helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
#include "precomp.h"
static int InternalSetScrollInfo(HWND hWnd, int nMin, int nMax, UINT nPage, int nPos, int fnBar)
{
SCROLLINFO si;
ZeroMemory(&si, sizeof(si));
si.cbSize = sizeof(si);
si.fMask = SIF_RANGE | SIF_PAGE | SIF_POS | SIF_DISABLENOSCROLL;
si.nMin = nMin;
si.nMax = nMax;
si.nPage = nPage;
si.nPos = nPos;
return SetScrollInfo(hWnd, fnBar, &si, TRUE);
}
void HandleKeyboardScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (wParam)
{
case VK_UP:
{
SendMessage(hWnd, WM_VSCROLL, MAKELONG(SB_LINEUP, 0), 0);
break;
}
case VK_DOWN:
{
SendMessage(hWnd, WM_VSCROLL, MAKELONG(SB_LINEDOWN, 0), 0);
break;
}
case VK_LEFT:
{
SendMessage(hWnd, WM_HSCROLL, MAKELONG(SB_LINEUP, 0), 0);
break;
}
case VK_RIGHT:
{
SendMessage(hWnd, WM_HSCROLL, MAKELONG(SB_LINEDOWN, 0), 0);
break;
}
case VK_PRIOR:
{
SendMessage(hWnd, WM_VSCROLL, MAKELONG(SB_PAGEUP, 0), 0);
break;
}
case VK_NEXT:
{
SendMessage(hWnd, WM_VSCROLL, MAKELONG(SB_PAGEDOWN, 0), 0);
break;
}
default:
{
break;
}
}
}
void HandleMouseScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state)
{
SCROLLINFO si;
int Delta;
int NewPos;
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE;
GetScrollInfo(hWnd, SB_VERT, &si);
if (Globals.uLinesToScroll == WHEEL_PAGESCROLL)
{
NewPos = si.nPage;
}
else
{
NewPos = Globals.uLinesToScroll * 5;
}
if (GET_WHEEL_DELTA_WPARAM(wParam) > 0)
{
NewPos = state->CurrentY - NewPos;
}
else
{
NewPos = state->CurrentY + NewPos;
}
NewPos = min(state->MaxY, max(0, NewPos));
if (NewPos == state->CurrentY)
{
return;
}
Delta = NewPos - state->CurrentY;
state->CurrentY = NewPos;
ScrollWindowEx(hWnd, 0, -Delta, NULL, NULL, NULL, NULL, SW_INVALIDATE);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
si.nPos = state->CurrentY;
SetScrollInfo(hWnd, SB_VERT, &si, TRUE);
}
void HandleHorizontalScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state)
{
SCROLLINFO si;
int Delta;
int NewPos;
ZeroMemory(&si, sizeof(si));
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE | SIF_TRACKPOS;
GetScrollInfo(hWnd, SB_HORZ, &si);
switch (LOWORD(wParam))
{
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
{
NewPos = si.nTrackPos;
break;
}
case SB_LINELEFT:
{
NewPos = state->CurrentX - 5;
break;
}
case SB_LINERIGHT:
{
NewPos = state->CurrentX + 5;
break;
}
case SB_PAGELEFT:
{
NewPos = state->CurrentX - si.nPage;
break;
}
case SB_PAGERIGHT:
{
NewPos = state->CurrentX + si.nPage;
break;
}
default:
{
NewPos = state->CurrentX;
break;
}
}
NewPos = min(state->MaxX, max(0, NewPos));
if (NewPos == state->CurrentX)
{
return;
}
Delta = NewPos - state->CurrentX;
state->CurrentX = NewPos;
ScrollWindowEx(hWnd, -Delta, 0, NULL, NULL, NULL, NULL, SW_INVALIDATE);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
si.nPos = state->CurrentX;
SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);
}
void HandleVerticalScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state)
{
SCROLLINFO si;
int Delta;
int NewPos;
ZeroMemory(&si, sizeof(si));
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE | SIF_TRACKPOS;
GetScrollInfo(hWnd, SB_VERT, &si);
switch (LOWORD(wParam))
{
case SB_THUMBPOSITION:
case SB_THUMBTRACK:
{
NewPos = si.nTrackPos;
break;
}
case SB_LINEUP:
{
NewPos = state->CurrentY - 5;
break;
}
case SB_LINEDOWN:
{
NewPos = state->CurrentY + 5;
break;
}
case SB_PAGEUP:
{
NewPos = state->CurrentY - si.nPage;
break;
}
case SB_PAGEDOWN:
{
NewPos = state->CurrentY + si.nPage;
break;
}
default:
{
NewPos = state->CurrentY;
break;
}
}
NewPos = min(state->MaxY, max(0, NewPos));
if (NewPos == state->CurrentY)
{
return;
}
Delta = NewPos - state->CurrentY;
state->CurrentY = NewPos;
ScrollWindowEx(hWnd, 0, -Delta, NULL, NULL, NULL, NULL, SW_INVALIDATE);
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
si.nPos = state->CurrentY;
SetScrollInfo(hWnd, SB_VERT, &si, TRUE);
}
void UpdateWindowScrollState(HWND hWnd, HBITMAP hBitmap, LPSCROLLSTATE lpState)
{
BITMAP bmp;
RECT rc;
if (!GetObject(hBitmap, sizeof(BITMAP), &bmp))
{
bmp.bmWidth = 0;
bmp.bmHeight = 0;
}
if (!GetClientRect(hWnd, &rc))
{
SetRectEmpty(&rc);
}
lpState->MaxX = max(bmp.bmWidth - rc.right, 0);
lpState->CurrentX = min(lpState->CurrentX, lpState->MaxX);
InternalSetScrollInfo(hWnd, 0, bmp.bmWidth, rc.right, lpState->CurrentX, SB_HORZ);
lpState->MaxY = max(bmp.bmHeight - rc.bottom, 0);
lpState->CurrentY = min(lpState->CurrentY, lpState->MaxY);
InternalSetScrollInfo(hWnd, 0, bmp.bmHeight, rc.bottom, lpState->CurrentY, SB_VERT);
}
BOOL ScrollBlt(PAINTSTRUCT ps, HBITMAP hBmp, SCROLLSTATE state)
{
RECT rect;
BOOL ret;
HDC hdc;
int xpos;
int ypos;
rect.left = ps.rcPaint.left;
rect.top = ps.rcPaint.top;
rect.right = (ps.rcPaint.right - ps.rcPaint.left);
rect.bottom = (ps.rcPaint.bottom - ps.rcPaint.top);
xpos = ps.rcPaint.left + state.CurrentX;
ypos = ps.rcPaint.top + state.CurrentY;
ret = FALSE;
hdc = CreateCompatibleDC(ps.hdc);
if (hdc)
{
if (SelectObject(hdc, hBmp))
{
ret = BitBlt(ps.hdc, rect.left, rect.top, rect.right, rect.bottom, hdc, xpos, ypos, SRCCOPY);
}
DeleteDC(hdc);
}
return ret;
}

View File

@@ -1,22 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/scrollutils.h
* PURPOSE: Scrolling releated helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
typedef struct _SCROLLSTATE
{
int CurrentX;
int CurrentY;
int MaxX;
int MaxY;
} SCROLLSTATE, *LPSCROLLSTATE;
void HandleKeyboardScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void HandleMouseScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state);
void HandleHorizontalScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state);
void HandleVerticalScrollEvents(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LPSCROLLSTATE state);
void UpdateWindowScrollState(HWND hWnd, HBITMAP hBmp, LPSCROLLSTATE lpState);
BOOL ScrollBlt(PAINTSTRUCT ps, HBITMAP hBmp, SCROLLSTATE state);

View File

@@ -1,287 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/winutils.c
* PURPOSE: Miscellaneous helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
#include "precomp.h"
void ShowLastWin32Error(HWND hwndParent)
{
DWORD dwError;
LPWSTR lpMsgBuf = NULL;
dwError = GetLastError();
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dwError, 0, (LPWSTR)&lpMsgBuf, 0, NULL);
MessageBoxW(hwndParent, lpMsgBuf, NULL, MB_OK | MB_ICONERROR);
LocalFree(lpMsgBuf);
}
void BringWindowToFront(HWND hWnd)
{
if (IsIconic(hWnd))
{
ShowWindow(hWnd, SW_RESTORE);
SetForegroundWindow(hWnd);
}
else
{
SetForegroundWindow(hWnd);
}
}
int DrawTextFromResource(HINSTANCE hInstance, UINT uID, HDC hDC, LPRECT lpRect, UINT uFormat)
{
LPWSTR lpBuffer;
int nCount;
nCount = LoadStringW(hInstance, uID, (LPWSTR)&lpBuffer, 0);
if (nCount)
{
return DrawTextW(hDC, lpBuffer, nCount, lpRect, uFormat);
}
else
{
return 0;
}
}
int MessageBoxRes(HWND hWnd, HINSTANCE hInstance, UINT uText, UINT uCaption, UINT uType)
{
MSGBOXPARAMSW mb;
ZeroMemory(&mb, sizeof(mb));
mb.cbSize = sizeof(mb);
mb.hwndOwner = hWnd;
mb.hInstance = hInstance;
mb.lpszText = MAKEINTRESOURCEW(uText);
mb.lpszCaption = MAKEINTRESOURCEW(uCaption);
mb.dwStyle = uType;
mb.dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT);
return MessageBoxIndirectW(&mb);
}
void DrawTextFromClipboard(HDC hDC, LPRECT lpRect, UINT uFormat)
{
HGLOBAL hGlobal;
LPWSTR lpchText;
hGlobal = GetClipboardData(CF_UNICODETEXT);
if (!hGlobal)
return;
lpchText = GlobalLock(hGlobal);
if (!lpchText)
return;
DrawTextW(hDC, lpchText, -1, lpRect, uFormat);
GlobalUnlock(hGlobal);
}
void BitBltFromClipboard(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, int nXSrc, int nYSrc, DWORD dwRop)
{
HDC hdcMem;
HBITMAP hbm;
hdcMem = CreateCompatibleDC(hdcDest);
if (hdcMem)
{
hbm = (HBITMAP)GetClipboardData(CF_BITMAP);
SelectObject(hdcMem, hbm);
BitBlt(hdcDest, nXDest, nYDest, nWidth, nHeight, hdcMem, nXSrc, nYSrc, dwRop);
DeleteDC(hdcMem);
}
}
void SetDIBitsToDeviceFromClipboard(UINT uFormat, HDC hdc, int XDest, int YDest, int XSrc, int YSrc, UINT uStartScan, UINT fuColorUse)
{
LPBITMAPINFOHEADER lpInfoHeader;
LPBYTE lpBits;
LONG bmWidth, bmHeight;
DWORD dwPalSize = 0;
HGLOBAL hGlobal;
hGlobal = GetClipboardData(uFormat);
if (!hGlobal)
return;
lpInfoHeader = GlobalLock(hGlobal);
if (!lpInfoHeader)
return;
if (lpInfoHeader->biSize == sizeof(BITMAPCOREHEADER))
{
LPBITMAPCOREHEADER lpCoreHeader = (LPBITMAPCOREHEADER)lpInfoHeader;
dwPalSize = 0;
if (lpCoreHeader->bcBitCount <= 8)
{
dwPalSize = (1 << lpCoreHeader->bcBitCount);
if (fuColorUse == DIB_RGB_COLORS)
dwPalSize *= sizeof(RGBTRIPLE);
else
dwPalSize *= sizeof(WORD);
}
bmWidth = lpCoreHeader->bcWidth;
bmHeight = lpCoreHeader->bcHeight;
}
else if ((lpInfoHeader->biSize == sizeof(BITMAPINFOHEADER)) ||
(lpInfoHeader->biSize == sizeof(BITMAPV4HEADER)) ||
(lpInfoHeader->biSize == sizeof(BITMAPV5HEADER)))
{
dwPalSize = lpInfoHeader->biClrUsed;
if ((dwPalSize == 0) && (lpInfoHeader->biBitCount <= 8))
dwPalSize = (1 << lpInfoHeader->biBitCount);
if (fuColorUse == DIB_RGB_COLORS)
dwPalSize *= sizeof(RGBQUAD);
else
dwPalSize *= sizeof(WORD);
if (/*(lpInfoHeader->biSize == sizeof(BITMAPINFOHEADER)) &&*/
(lpInfoHeader->biCompression == BI_BITFIELDS))
{
dwPalSize += 3 * sizeof(DWORD);
}
/*
* This is a (disabled) hack for Windows, when uFormat == CF_DIB
* it needs yet another extra 3 DWORDs, in addition to the
* ones already taken into account in via the compression.
* This problem doesn't happen when uFormat == CF_DIBV5
* (in that case, when compression is taken into account,
* everything is nice).
*
* NOTE 1: This fix is only for us, because when one pastes DIBs
* directly in apps, the bitmap offset problem is still present.
*
* NOTE 2: The problem can be seen with Windows' clipbrd.exe if
* one copies a CF_DIB image in the clipboard. By default Windows'
* clipbrd.exe works with CF_DIBV5 and CF_BITMAP, so the problem
* is unseen, and the clipboard doesn't have to convert to CF_DIB.
*
* FIXME: investigate!!
* ANSWER: this is a Windows bug; part of the answer is there:
* http://go4answers.webhost4life.com/Help/bug-clipboard-format-conversions-28724.aspx
* May be related:
* http://blog.talosintel.com/2015/10/dangerous-clipboard.html
*/
#if 0
if ((lpInfoHeader->biSize == sizeof(BITMAPINFOHEADER)) &&
(lpInfoHeader->biCompression == BI_BITFIELDS))
{
dwPalSize += 3 * sizeof(DWORD);
}
#endif
bmWidth = lpInfoHeader->biWidth;
bmHeight = lpInfoHeader->biHeight;
}
else
{
/* Invalid format */
GlobalUnlock(hGlobal);
return;
}
lpBits = (LPBYTE)lpInfoHeader + lpInfoHeader->biSize + dwPalSize;
SetDIBitsToDevice(hdc,
XDest, YDest,
bmWidth, bmHeight,
XSrc, YSrc,
uStartScan,
bmHeight,
lpBits,
(LPBITMAPINFO)lpInfoHeader,
fuColorUse);
GlobalUnlock(hGlobal);
}
void PlayMetaFileFromClipboard(HDC hdc, const RECT *lpRect)
{
LPMETAFILEPICT mp;
HGLOBAL hGlobal;
hGlobal = GetClipboardData(CF_METAFILEPICT);
if (!hGlobal)
return;
mp = (LPMETAFILEPICT)GlobalLock(hGlobal);
if (!mp)
return;
SetMapMode(hdc, mp->mm);
SetViewportExtEx(hdc, lpRect->right, lpRect->bottom, NULL);
SetViewportOrgEx(hdc, lpRect->left, lpRect->top, NULL);
PlayMetaFile(hdc, mp->hMF);
GlobalUnlock(hGlobal);
}
void PlayEnhMetaFileFromClipboard(HDC hdc, const RECT *lpRect)
{
HENHMETAFILE hEmf;
hEmf = GetClipboardData(CF_ENHMETAFILE);
PlayEnhMetaFile(hdc, hEmf, lpRect);
}
UINT RealizeClipboardPalette(HWND hWnd)
{
HPALETTE hPalette;
HPALETTE hOldPalette;
UINT uResult;
HDC hDevContext;
if (!OpenClipboard(Globals.hMainWnd))
{
return GDI_ERROR;
}
if (!IsClipboardFormatAvailable(CF_PALETTE))
{
CloseClipboard();
return GDI_ERROR;
}
hPalette = GetClipboardData(CF_PALETTE);
if (!hPalette)
{
CloseClipboard();
return GDI_ERROR;
}
hDevContext = GetDC(hWnd);
if (!hDevContext)
{
CloseClipboard();
return GDI_ERROR;
}
hOldPalette = SelectPalette(hDevContext, hPalette, FALSE);
if (!hOldPalette)
{
ReleaseDC(hWnd, hDevContext);
CloseClipboard();
return GDI_ERROR;
}
uResult = RealizePalette(hDevContext);
SelectPalette(hDevContext, hOldPalette, FALSE);
ReleaseDC(hWnd, hDevContext);
CloseClipboard();
return uResult;
}

View File

@@ -1,18 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clipboard Viewer
* FILE: base/applications/clipbrd/winutils.h
* PURPOSE: Miscellaneous helper functions.
* PROGRAMMERS: Ricardo Hanke
*/
void ShowLastWin32Error(HWND hwndParent);
void BringWindowToFront(HWND hWnd);
int DrawTextFromResource(HINSTANCE hInstance, UINT uID, HDC hDC, LPRECT lpRect, UINT uFormat);
int MessageBoxRes(HWND hWnd, HINSTANCE hInstance, UINT uText, UINT uCaption, UINT uType);
void DrawTextFromClipboard(HDC hDC, LPRECT lpRect, UINT uFormat);
void BitBltFromClipboard(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, int nXSrc, int nYSrc, DWORD dwRop);
void SetDIBitsToDeviceFromClipboard(UINT uFormat, HDC hdc, int XDest, int YDest, int XSrc, int YSrc, UINT uStartScan, UINT fuColorUse);
void PlayMetaFileFromClipboard(HDC hdc, const RECT *lpRect);
void PlayEnhMetaFileFromClipboard(HDC hdc, const RECT *lpRect);
UINT RealizeClipboardPalette(HWND hWnd);

View File

@@ -1,4 +1,3 @@
add_subdirectory(clip)
add_subdirectory(comp)
add_subdirectory(cscript)
add_subdirectory(dbgprint)

View File

@@ -1,5 +0,0 @@
add_executable(clip clip.c clip.rc)
set_module_type(clip win32cui UNICODE)
add_importlibs(clip user32 msvcrt kernel32 advapi32)
add_cd_file(TARGET clip DESTINATION reactos/system32 FOR all)

View File

@@ -1,145 +0,0 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Clip Command
* FILE: base/applications/cmdutils/clip/clip.c
* PURPOSE: Provides clipboard management for command-line programs.
* PROGRAMMERS: Ricardo Hanke
*/
#include <stdio.h>
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
#include "resource.h"
static void PrintError(void)
{
DWORD dwError;
LPWSTR lpMsgBuf = NULL;
dwError = GetLastError();
if (dwError == NO_ERROR)
return;
FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, dwError, 0, (LPWSTR)&lpMsgBuf, 0, NULL);
wprintf(L"%s", lpMsgBuf);
LocalFree(lpMsgBuf);
}
static void PrintResourceString(UINT uID)
{
WCHAR buff[500];
if (LoadStringW(GetModuleHandle(NULL), uID, buff, ARRAYSIZE(buff)))
{
wprintf(L"%s", buff);
}
}
static BOOL IsDataUnicode(HGLOBAL hGlobal)
{
BOOL bReturn;
LPVOID lpBuffer;
lpBuffer = GlobalLock(hGlobal);
bReturn = IsTextUnicode(lpBuffer, GlobalSize(hGlobal), NULL);
GlobalUnlock(hGlobal);
return bReturn;
}
int wmain(int argc, wchar_t** argv)
{
HANDLE hInput;
DWORD dwBytesRead;
BOOL bStatus;
HGLOBAL hBuffer;
HGLOBAL hTemp;
LPBYTE lpBuffer;
SIZE_T dwSize = 0;
hInput = GetStdHandle(STD_INPUT_HANDLE);
/* Check for usage */
if (argc > 1 && wcsncmp(argv[1], L"/?", 2) == 0)
{
PrintResourceString(IDS_HELP);
return 0;
}
if (GetFileType(hInput) == FILE_TYPE_CHAR)
{
PrintResourceString(IDS_USAGE);
return 0;
}
/* Initialize a growable buffer for holding clipboard data */
hBuffer = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, 4096);
if (!hBuffer)
{
PrintError();
return -1;
}
/*
* Read data from the input stream by chunks of 4096 bytes
* and resize the buffer each time when needed.
*/
do
{
lpBuffer = GlobalLock(hBuffer);
if (!lpBuffer)
goto cleanup;
bStatus = ReadFile(hInput, lpBuffer + dwSize, 4096, &dwBytesRead, NULL);
dwSize += dwBytesRead;
GlobalUnlock(hBuffer);
hTemp = GlobalReAlloc(hBuffer, GlobalSize(hBuffer) + 4096, GMEM_ZEROINIT);
if (!hTemp)
goto cleanup;
hBuffer = hTemp;
}
while (dwBytesRead > 0 && bStatus);
/*
* Resize the buffer to the total size of data read.
* Note that, if the call fails, we still have the old buffer valid.
* The old buffer would be larger than the actual size of data it contains,
* but this is not a problem for us.
*/
hTemp = GlobalReAlloc(hBuffer, dwSize + sizeof(WCHAR), GMEM_ZEROINIT);
if (hTemp)
hBuffer = hTemp;
/* Attempt to open the clipboard */
if (!OpenClipboard(NULL))
goto cleanup;
/* Empty it, copy our data, then close it */
EmptyClipboard();
if (IsDataUnicode(hBuffer))
{
SetClipboardData(CF_UNICODETEXT, hBuffer);
}
else
{
// TODO: Convert text from current console page to standard ANSI.
// Alternatively one can use CF_OEMTEXT as done here.
SetClipboardData(CF_OEMTEXT, hBuffer);
}
CloseClipboard();
return 0;
cleanup:
GlobalFree(hBuffer);
PrintError();
return -1;
}

View File

@@ -1,39 +0,0 @@
#include <windef.h>
#include "resource.h"
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Clip Command"
#define REACTOS_STR_INTERNAL_NAME "clip"
#define REACTOS_STR_ORIGINAL_FILENAME "clip.exe"
#include <reactos/version.rc>
/* UTF-8 */
#pragma code_page(65001)
#ifdef LANGUAGE_DE_DE
#include "lang/de-DE.rc"
#endif
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif
#ifdef LANGUAGE_ES_ES
#include "lang/es-ES.rc"
#endif
#ifdef LANGUAGE_FR_FR
#include "lang/fr-FR.rc"
#endif
#ifdef LANGUAGE_RO_RO
#include "lang/ro-RO.rc"
#endif
#ifdef LANGUAGE_RU_RU
#include "lang/ru-RU.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,9 +0,0 @@
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "\nGeben Sie ""CLIP /?"" ein, um die Syntax anzuzeigen.\n"
IDS_HELP "\nLeitet die Ausgabe von Befehlszeilenprogrammen in die Zwischenablage um.\n\n\
CLIP [/?]\n\n\
/? Zeigt diese Hilfe an.\n"
END

View File

@@ -1,9 +0,0 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
STRINGTABLE
BEGIN
IDS_USAGE "\nType ""CLIP /?"" for usage information.\n"
IDS_HELP "\nRedirects the output of command-line programs to the clipboard.\n\n\
CLIP [/?]\n\n\
/? Show this help message.\n"
END

View File

@@ -1,11 +0,0 @@
/* Spanish translation by Ismael Ferreras Morezuelas (Swyter) */
LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "\nPara ver los argumentos y opciones de uso escribe ""CLIP /?"".\n"
IDS_HELP "\nRedirije la salida de programas de línea de comandos al portapapeles.\n\n\
CLIP [/?]\n\n\
/? Muestra este mensaje de ayuda.\n"
END

View File

@@ -1,9 +0,0 @@
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "\nEntrez ""CLIP /?"" pour afficher la syntaxe.\n"
IDS_HELP "\nRedirige la sortie des programmes en ligne de commande vers le Presse-Papiers.\n\n\
CLIP [/?]\n\n\
/? Affiche ce message d'aide.\n"
END

View File

@@ -1,9 +0,0 @@
LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL
STRINGTABLE
BEGIN
IDS_USAGE "\nTastați ""CLIP /?"" pentru informațiile de utilizare.\n"
IDS_HELP "\nRedirecționează în clipboard ieșirea programelor linie-de-comandă.\n\n\
CLIP [/?]\n\n\
/? Afișează acest mesaj.\n"
END

View File

@@ -1,11 +0,0 @@
/* Russian language resource file by Kudratov Olimjon (olim98@bk.ru) */
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "\nВведите ""CLIP /?"" для получения справки по использованию.\n"
IDS_HELP "\nПеренаправляет вывод от утилит командной строки в буфер обмена.\n\n\
CLIP [/?]\n\n\
/? Вывод справки по использованию..\n"
END

View File

@@ -1,11 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "\nKullanım bilgisi için ""CLIP /?"" yazınız.\n"
IDS_HELP "\nKomut yatacı izlencelerinin çıktısını panoya yönlendirir.\n\n\
CLIP [/?]\n\n\
/? Bu yardım iletisini göster.\n"
END

View File

@@ -1,11 +0,0 @@
/* Simplified Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
BEGIN
IDS_USAGE "\n输入 ""CLIP /?"" 知道用法信息。\n"
IDS_HELP "\n将命令行程序的输出重定向到剪贴板。\n\n\
CLIP [/?]\n\n\
/? 显示此帮助消息。\n"
END

View File

@@ -1,11 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_USAGE "\n輸入 ""CLIP /?"" 知道用法資訊。\n"
IDS_HELP "\n將命令列程式的輸出重定向到剪貼簿。\n\n\
CLIP [/?]\n\n\
/? 顯示此説明消息。\n"
END

View File

@@ -1,4 +0,0 @@
#pragma once
#define IDS_USAGE 100
#define IDS_HELP 101

View File

@@ -19,7 +19,7 @@
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS comp utility
* FILE: base/applications/cmdutils/comp/comp.c
* FILE: comp.c
* PURPOSE: Compares the contents of two files
* PROGRAMMERS: Ged Murphy (gedmurphy@gmail.com)
* REVISIONS:

View File

@@ -15,7 +15,7 @@ add_typelib(ihost.idl)
set_source_files_properties(rsrc.rc PROPERTIES OBJECT_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ihost.tlb)
target_link_libraries(cscript uuid wine)
set_module_type(cscript win32cui UNICODE)
add_importlibs(cscript shell32 oleaut32 ole32 advapi32 user32 msvcrt kernel32 ntdll)
add_importlibs(cscript shell32 oleaut32 ole32 advapi32 msvcrt kernel32 ntdll)
add_dependencies(cscript stdole2 cscript_idlheader)
add_pch(cscript ${wscript_folder}/wscript.h SOURCE)
add_cd_file(TARGET cscript DESTINATION reactos/system32 FOR all)

View File

@@ -1,7 +1,7 @@
/*
* PROJECT: ReactOS DbgPrint Utility
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/cmdutils/dbgprint/dbgprint.c
* FILE: tools/dbgprint/dbgprint.c
* PURPOSE: outputs a text via DbgPrint API
* PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
* Christoph von Wittich (Christoph_vW@ReactOS.org)

View File

@@ -43,15 +43,9 @@
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,6 +1,6 @@
/*
* PROJECT: ReactOS DOSKey
* FILE: base/applications/cmdutils/doskey/lang/sv-SE.rc
* FILE: base\applications\cmdutils\doskey\lang\sv-SE.rc
* PURPOSE: Swedish resource file
* Translation: Jaix Bly
*/

View File

@@ -1,26 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_HELP "Komut yatacı düzenleme ayarlarını, geçmişi ve makroları yönetir.\n\
\n\
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=boyut]\n\
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=kütük] [makro adı=[metin]]\n\
\n\
/INSERT Ekleme kipini etkinleştirir.\n\
/OVERSTRIKE Ekleme kipini edilginleştirir.\n\
/EXENAME=exe adı İlgili geçmişi ve makroları görüntülemek ya da değiştirmek\n\
için izlencenin adını ayarlar. Ön tanımlı cmd.exe'dir.\n\
/HISTORY Komut geçmişini görüntüler.\n\
/LISTSIZE=boyut Geçmiş arabelleği başına komut sayısını ayarlar.\n\
/REINSTALL Komut geçmişini siler.\n\
/MACROS Makro tanımlarını görüntüler.\n\
/MACROS:exe adı Belirli bir izlence için makro tanımlarını görüntüler.\n\
/MACROS:ALL Tüm izlenceler için makro tanımlarını görüntüler.\n\
/MACROFILE=kütük Bir kütükten makro tanımlarını yükler.\n\
makro adı Oluşturmak için bir makro adını belirtir.\n\
metin Makro için yerine geçme metnini belirtir.\n"
IDS_INVALID_MACRO_DEF "Geçersiz makro tanımı: %s\n"
END

View File

@@ -1,26 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_HELP "管理命令列編輯設置、歷史記錄和宏。\n\
\n\
DOSKEY [/INSERT | /OVERSTRIKE] [/EXENAME=exe] [/HISTORY] [/LISTSIZE=大小]\n\
[/REINSTALL] [/MACROS[:exe | :ALL]] [/MACROFILE=文件] [宏名=[文本]]\n\
\n\
/INSERT 開啟插入模式。\n\
/OVERSTRIKE \n\
/EXENAME=exename 設置要查看或改變歷史記錄和宏的程式名。\n\
預設為 cmd.exe。\n\
/HISTORY 顯示命令歷史。\n\
/LISTSIZE=size 設置每個歷史記錄緩存記錄的命令數。\n\
/REINSTALL 清空命令歷史記錄。\n\
/MACROS 顯示定義的宏。\n\
/MACROS:exename 顯示為指定程式定義的宏。\n\
/MACROS:ALL 顯示為所有程式定義的宏。\n\
/MACROFILE=file 從檔載入巨集定義。\n\
宏名 指定要創建的宏名。\n\
文本 指定要替換該宏的文本。\n"
IDS_INVALID_MACRO_DEF "不正確巨集定義:%s\n"
END

View File

@@ -63,15 +63,9 @@
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,15 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "FIND: Bir dizgi içeren bir kütüğün tüm yataçlarını yazdırır.\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""dizgi"" [ kütük... ]\n\
/C Dizgi içeren yataç sayısını say\n\
/I Büyük-küçük harfliği yok say\n\
/N 1'den başlayan, görüntülenen yataç sayısı\n\
/V Dizgi içermeyen yataçları yazdır"
IDS_NO_SUCH_FILE "FIND: %s: Böyle dosya yok\n"
IDS_CANNOT_OPEN "FIND: %s: Kütük açılamıyor\n"
END

View File

@@ -1,15 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_USAGE "FIND: 輸出某檔中包含指定字串的所有行。\n\n\
FIND [ /C ] [ /I ] [ /N ] [ /V ] ""字串"" [ 文件... ]\n\
/C 計算包含該字串的行數\n\
/I 忽略大小寫\n\
/N 從 1 開始為顯示的行編號\n\
/V 輸出不包含該指定字串的行"
IDS_NO_SUCH_FILE "FIND: %s: 沒有這個檔\n"
IDS_CANNOT_OPEN "FIND: %s: 無法打開檔\n"
END

View File

@@ -30,7 +30,7 @@ VOID PrintResourceString(INT resID, ...)
va_list args;
va_start(args, resID);
LoadStringW(GetModuleHandleW(NULL), resID, bufSrc, ARRAYSIZE(bufSrc));
LoadStringW(GetModuleHandleW(NULL), resID, bufSrc, RC_STRING_MAX_SIZE);
vswprintf(bufFormatted, bufSrc, args);
CharToOemW(bufFormatted, bufFormattedOem);
fputs(bufFormattedOem, stdout);

View File

@@ -60,15 +60,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_UK_UA
#include "lang/uk-UA.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,77 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_NO_ENTRY "Bu komut yardım aracı eliyle desteklenmiyor.\n""%s /?"" deneyiniz.\n"
END
STRINGTABLE
BEGIN
IDS_USAGE "ReactOS komutları için yardım bilgisini sağlar.\n\n\
HELP [komut]\n\n\
komut - Bu komut için yardım bilgisini görüntüler.\n"
IDS_HELP1 "Tüm kullanılabilir komutların (ve tanımların) dizelgesi:\n\n\
help komut\n\
komut /? Belirtilen bir komut üzerine daha çok bilgi için\n\n\
? Tüm kullanılabilir komutları dizelgele (tanımlar olmadan).\n\
ALIAS Başka adları ayarlar, siler ya da gösterir.\n\
ATTRIB Kütük öz niteliklerini görüntüler ya da değiştirir.\n\
BEEP Hoparlörden ""biip"" sesi çıkart.\n\
CALL Bir toplu iş izlencesini bir başkasından çağırır.\n\
CD Şimdiki dizinin adını görüntüler ya da şimdiki dizini değiştirir.\n\
CHCP Etkin kod sayfası numarasını görüntüler ya da ayarlar.\n\
CHOICE Bir seçim takımından birini seçmeye kullanıcıyı bekler.\n\
CLS Görüntülüğü siler.\n\
CMD ReactOS komut yorumcusunun yeni bir örneğini başlatır.\n\
COLOR Ön tanımlı konsol ön plan ve arka plan renklerini ayarlar.\n\
COPY Bir ya da daha çok kütüğü başka bir konuma çoğaltır.\n\
DATE Târihi görüntüler ya da ayarlar.\n\
DELETE Bir ya da daha çok kütük siler.\n\
DIR Bir dizindeki kütüklerin ve alt dizinlerin bir dizelgesini görüntüler.\n\
ECHO İletileri görüntüler ya da komut yankılanmasını açar ya da kapatır.\n\
ERASE Bir ya da daha çok kütük siler.\n\
EXIT CMD.EXE izlencesinden (komut yorumcusundan) çıkar.\n\
FOR Bir kütük takımı içinde tüm kütükler için belirtilen bir komut\n\
çalıştırır.\n\
FREE (boş) disk alanı.\n\
GOTO Bir toplu iş izlencesinde ReactOS komut yorumcusunu etiketlenmiş bir\n\
yataca yönlendirir.\n\
HELP ReactOS komutları için yardım bilgisini sağlar.\n\
HISTORY Kullanılan tüm komutları dizelgele.\n\
IF Toplu iş izlencelerinde şartlı işlemeyi gerçekleştirir.\n\
LABEL Bir diskin birim etiketini oluşturur, değiştirir ya da siler.\n\
MD Bir dizin oluşturur.\n\
MKDIR Bir dizin oluşturur.\n\
MKLINK Bir kütük dizgesi bağlantı nesnesi oluşturur.\n\
MOVE Bir dizinden bir ya da daha çok kütüğü başka bir dizine taşır.\n\
PATH Çalıştırılailir kütükler için bir arama yolu görüntüler ya da\n\
oluşturur.\n\
PAUSE Bir toplu iş kütüğünde işlemeyi askıya alır ve bir ileti görüntüler.\n\
POPD PUSHD ile kaydedilen şimdiki dizinin bir önceki değerini \n\
yeniden yükler.\n\
PROMPT Komut istemini değiştirir.\n\
PUSHD Şimdiki dizini kaydeder, sonra onu değiştirir.\n\
RD Bir dizin siler.\n\
REM Toplu iş kütüklerinde yorumları (sözleri) kaydeder.\n\
REN Bir kütüğün ya da kütüklerin adını değiştirir.\n\
RENAME Bir kütüğün ya da kütüklerin adını değiştirir.\n\
REPLACE Kütüklerin yerlerini değiştirir.\n\
RMDIR Bir dizin siler.\n\
SCREEN İmleci taşı ve seçimlik olarak metin yazdır.\n\
SET ReactOS ortam değişkenlerini görüntüler, ayarlar ya da kaldırır.\n\
SHIFT Toplu iş kütüklerindeki yerine konulabilir değişkenlerin konumunu\n\
değiştirir.\n"
IDS_HELP2 "START Belirtilen bir izlenceyi ya da komutu çalıştırmak için ayrı bir\n\
pencere başlatır.\n\
Komut çalıştırır.\n\
TIME Dizge saatini görüntüler ya da ayarlar.\n\
TIMER On süreölçeri kullanmaya izin verir.\n\
TITLE Bir CMD.EXE oturumu için pencere başlığını ayarlar.\n\
TYPE Bir metin kütüğünün içeriğini görüntüler.\n\
VER ReactOS sürümünü görüntüler.\n\
VERIFY ReactOS'a kütüklerinizin bir diske doğru yazıldığını doğrulayıp\n\
doğrulamayacağını söyler.\n\
VOL Bir disk birim etiketi ve dizilik numarasını görüntüler.\n"
END

View File

@@ -1,70 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_NO_ENTRY "通過説明實用程式不支援此命令。 \n試 ""%s /?""\n。"
END
STRINGTABLE
BEGIN
IDS_USAGE "提供ReactOS命令的説明資訊。\n\n\
HELP [command]\n\n\
command - 顯示此命令的説明資訊。\n"
IDS_HELP1 "列出所有可用命令 (+ 它們的描述)\n\n\
help 命令\n\
命令 /? 得到特定命令的更多資訊\n\n\
? 列出所有可用命令 (沒有描述)。\n\
ALIAS 設置、刪除或顯示別名。\n\
ATTRIB 顯示或改變檔案屬性。\n\
BEEP 使揚聲器發聲。\n\
CALL 從一個批次程式中調用另一個。\n\
CD 顯示目前的目錄的名稱或更改目前的目錄。\n\
CHCP 顯示或設置活動字碼頁。\n\
CHOICE 等待使用者在一組選項中做出選擇。\n\
CLS 清除螢幕。\n\
CMD 啟動 ReactOS 命令列解譯器的一個新實例。\n\
COLOR 設置主控台預設的前景和背景顏色。\n\
COPY 將一個或多個檔案複製到另一個位置。\n\
DATE 顯示或設置日期。\n\
DELETE 刪除一個或多個檔。\n\
DIR 顯示一個目錄中的檔案清單和子目錄。\n\
ECHO 顯示消息,或打開/關閉命令回顯。\n\
ERASE 刪除一個或多個檔。\n\
EXIT 退出 CMD.EXE 程式 (命令直譯器)。\n\
FOR 為一組檔中的每一個檔執行指定命令。\n\
FREE (空閒的) 磁碟空間。\n\
GOTO 在批次程式中指示 ReactOS 命令直譯器跳轉到被標記的行繼續執行。\n\
HELP 為 ReactOS 命令提供説明資訊。\n\
HISTORY 列出所有曾被使用的命令。\n\
IF 在批次程式中執行條件控制。\n\
LABEL 創建、更改或刪除磁片標籤。\n\
MD 創建一個目錄。\n\
MKDIR 創建一個目錄。\n\
MKLINK 創建一個檔案系統連結化物件。\n\
MOVE 將一個或多個檔從一個資料夾移動到另一個資料夾。\n\
PATH 顯示或設置可執行檔的搜索路徑。\n\
PAUSE 掛起批次檔的執行並顯示一條消息。\n\
POPD 恢復由 PUSHD 存儲的前一個目前的目錄的值。\n\
PROMPT 更改命令提示符。\n\
PUSHD 保存目前的目錄然後更改。\n\
RD 刪除一個目錄。\n\
REM 在批次檔中記錄注釋 (評論)。\n\
REN 重命名一個或多個檔。\n\
RENAME 重命名一個或多個檔。\n\
REPLACE 替換檔。\n\
RMDIR 刪除一個目錄。\n\
SCREEN 移動游標並可選地輸出文本。\n\
SET 顯示、設置或刪除 ReactOS 環境變數。\n\
SHIFT 在批次檔中移動可替換參數的位置。\n"
IDS_HELP2 "START 啟動一個分隔的視窗來運行指定的程式或命令。\n\
執行命令。\n\
TIME 顯示或設置系統時間。\n\
TIMER 允許使用至多十個停錶。\n\
TITLE 設置一個 CMD.EXE 會話的視窗標題。\n\
TYPE 顯示一個文字檔的內容。\n\
VER 顯示 ReactOS 版本。\n\
VERIFY 決定 ReactOS 是否檢驗您的檔已被正確地寫入磁片。\n\
VOL 顯示磁片標籤和序號。\n"
END

View File

@@ -39,12 +39,3 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#ifdef LANGUAGE_SQ_AL
#include "lang/sq-AL.rc"
#endif
#ifdef LANGUAGE_TR_TR
#include "lang/tr-TR.rc"
#endif
#ifdef LANGUAGE_ZH_CN
#include "lang/zh-CN.rc"
#endif
#ifdef LANGUAGE_ZH_TW
#include "lang/zh-TW.rc"
#endif

View File

@@ -1,10 +0,0 @@
/* TRANSLATOR: 2015 Erdem Ersoy (eersoy93) (erdemersoy@live.com) */
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
STRINGTABLE
BEGIN
IDS_USAGE "Şimdiki anabilgisayarın adını yazdır.\n\nhostname"
IDS_NOSET "hostname -s desteklenmiyor."
IDS_ERROR "Win32 yanlışlığı"
END

View File

@@ -1,10 +0,0 @@
/* Simplified Chinese translation by Henry Tang Ih 2015 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
STRINGTABLE
BEGIN
IDS_USAGE "打印当前主机的名称。\n\nhostname"
IDS_NOSET "hostname -s 不受支持。"
IDS_ERROR "Win32 错误"
END

View File

@@ -1,10 +0,0 @@
/* Traditional Chinese translation by Henry Tang Ih 2016 (henrytang2@hotmail.com) */
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
STRINGTABLE
BEGIN
IDS_USAGE "列印當前主機的名稱。\n\nhostname"
IDS_NOSET "hostname -s 不受支援。"
IDS_ERROR "Win32 錯誤"
END

Some files were not shown because too many files have changed in this diff Show More