Compare commits
26 Commits
network_st
...
dib_rewrit
Author | SHA1 | Date | |
---|---|---|---|
|
f5e225dd3b | ||
|
516e2cc43d | ||
|
e8516eca35 | ||
|
194e3169b6 | ||
|
72f1e50a9a | ||
|
428150412d | ||
|
74a8fc4a83 | ||
|
05374e6cb4 | ||
|
ac4d69e0e5 | ||
|
8636a9e3d3 | ||
|
80e30e05e8 | ||
|
fb0060e616 | ||
|
33fa833042 | ||
|
df2fd2fd3c | ||
|
698e524965 | ||
|
b417fbcc66 | ||
|
f806ab62fb | ||
|
54747199af | ||
|
fb3cfa8952 | ||
|
d5ecfd0434 | ||
|
72d0eb760a | ||
|
a33c59fba9 | ||
|
8ccaec4a4a | ||
|
79d909144f | ||
|
28f1ad65a6 | ||
|
cb252654e2 |
@@ -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()
|
||||
|
||||
|
3
CREDITS
@@ -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
@@ -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
@@ -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.
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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 "минута"
|
||||
|
@@ -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
|
||||
*/
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 39 KiB |
@@ -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
|
||||
|
@@ -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:
|
||||
|
@@ -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)
|
||||
|
@@ -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,
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
{
|
||||
|
@@ -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 {
|
||||
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 39 KiB |
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
@@ -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;
|
||||
}
|
@@ -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
|
||||
);
|
||||
};
|
||||
|
@@ -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);
|
||||
}
|
@@ -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
|
||||
);
|
||||
};
|
||||
|
@@ -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);
|
||||
}
|
@@ -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(
|
||||
);
|
||||
};
|
@@ -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);
|
||||
}
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
Before Width: | Height: | Size: 39 KiB |
@@ -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
|
@@ -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)
|
@@ -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;
|
||||
}
|
@@ -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
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
@@ -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;
|
||||
}
|
@@ -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);
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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_ */
|
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 25 KiB |
@@ -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
|
@@ -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;
|
||||
}
|
@@ -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);
|
@@ -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;
|
||||
}
|
@@ -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);
|
@@ -1,4 +1,3 @@
|
||||
add_subdirectory(clip)
|
||||
add_subdirectory(comp)
|
||||
add_subdirectory(cscript)
|
||||
add_subdirectory(dbgprint)
|
||||
|
@@ -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)
|
@@ -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;
|
||||
}
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#define IDS_USAGE 100
|
||||
#define IDS_HELP 101
|
@@ -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:
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
@@ -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
|
||||
*/
|
||||
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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);
|
||||
|
@@ -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
|
@@ -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
|
@@ -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
|
@@ -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
|
||||
|
@@ -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
|
@@ -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
|
@@ -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
|